# tracelog
**Repository Path**: studyshao/tracelog
## Basic Information
- **Project Name**: tracelog
- **Description**: 日志追踪:为logback 日志添加全局唯一标识traceId,实现追踪日志链
- **Primary Language**: Java
- **License**: MIT
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 9
- **Created**: 2023-09-19
- **Last Updated**: 2023-09-19
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# traclog 日志追踪
## 介绍
这是一个日志追踪的组件,适用于spring为架构项目中。原理是利用过滤器或拦截器拦截请求,生成一个uuid,并加入到logback的上下文MDC中,然后在logback.xml中打印出来,使日志调用链具有可检索的全局唯一id。
日志追踪的工具有很多,但是要么都很重,安装使用成本很高,要么不全面,不能同时兼容多种框架,traclog很轻很简单,特别适合小型单机项目或者业务不太复杂的微服务,大型项目除了日志追踪可能还要日志收集和链路追踪,那么请参考其他开源工具,比如skywalking:https://www.jianshu.com/p/b69bc629f476
## 使用
只能在java springboot框架的项目中使用,并且日志组件用的使logback。支持以下常见应用生成或传递traceId:springmvc的http, springcloud的feign,有注解@Scheduled,@PostConstruct,@Async的方法,apache dubbo调用,以及支持Okhttp和HttpClient调用时传递traceId(需要自己将已实现的拦截器加入到你的Okhttp和HttpClient)。
1. 引入依赖
建议www.search.maven.org搜最新版本
```
com.wuyunonline.tracelog
tracelog-spring-boot-starter
1.0.0
```
2. 配置logback
项目中找到logback.xml或logback-spring.xml,
在日志格式中加入[traceId:%X{traceId}]
例如:

3. 启动项目
启动自己的项目后,测试一下发起一个请求,可以看到日志打印traceId说明成功,例如:

## 扩展
1. 这里涉及到的dubbo必须是apache dubbo 依赖是org.apache.dubbo这样的,其他dubbo可能不兼容(老版的是阿里的,阿里已将dubbo加入apache)。
2. 使用Okhttp或HttpClient调用时候如果想传递traceId,必须在自己的Okhttp或HttpClient中加入traclog 拦截器,如下:
Okhttp
```
import com.wuyunonline.tracelog.interceptor.TraceLogOkhttpInterceptor;
...
OkHttpClient okHttpClient = new OkHttpClient.Builder().addInterceptor(new TraceLogOkhttpInterceptor()).build();
```
HttpClient
```
import com.wuyunonline.tracelog.interceptor.TraceLogHttpClientInterceptor;
...
CloseableHttpClient httpClient = HttpClientBuilder.create().addInterceptorFirst(new TraceLogHttpClientInterceptor()).build();
```
3. 由于精力有限,未能全面测试,如果引入jar没有效果,可能是某些原因导致自动注入未生效,这时候最快的方式是自实现,请参考文档:
https://www.jianshu.com/p/c93e55b1c011