A-A+

日志追踪

2021年01月17日 技术, 默认 暂无评论 阅读 1,519 次

对于分布式系统,在某些场景下不但需要知道异常发生的位置,可能还需要知道异常发生时的上下游情况。

如果在日志中加入唯一标识来对上下游的信息进行分类,可以简单的满足日常的需要。

有两个开源项目实现了这个需求,分别是:

//TLog
https://gitee.com/bryan31/TLog.git

//日志链路追踪
https://gitee.com/ganbing518/trace.git

这两个项目的核心原理其实是一样的,都是通过Slf4j的MDC实现全局TraceId的记录和输出。

TLog更加完备一些,提供的功能更加丰富一些;日志链路追踪这个项目要相对来说简单一些。

具体的框架使用不在此详述了,这里简单介绍一下实现的原理。

1. 基于Http Web的实现。

可以基于Filter或者Spring Interceptor实现,具体的执行过程如下图:

对于SpringMVC的项目来说,大多数情况下,Filter和Interceptor二选一即可。

2. 基于Dubbo的实现

基本的实现原理是:继承Dubbo的Filter,然后遵循它的SPI机制实现自动注入和拦截。

3. 基于线程的实现

必须依赖于线程池实现,通过自定义线程池,在提交线程任务的时候,将主线程的MDC变量写入至子线程的MDC中,相当于做了一个代理类。

此外还有Feign的实现,大概原理一样,只是我日常没怎么用过,所以直接贴个代码:

//也是set header
requestTemplate.header("TraceId", traceId);

本来以为年底忙,结果发现年初更忙,天天的感觉就是困。

发这篇之前,又发现了一个项目,貌似更加完整一些,有空再看吧,仓库地址如下:

https://gitee.com/frankchenlong/plumelog.git

以上,如有错误,欢迎指正。

觉的不错?可以关注我的公众号↑↑↑

给我留言

Copyright © 字痕随行 保留所有权利.   Theme  Ality

用户登录

分享到: