# springboot-logging-trace
**Repository Path**: codingAobama/springboot-logging-trace
## Basic Information
- **Project Name**: springboot-logging-trace
- **Description**: No description available
- **Primary Language**: Unknown
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2021-07-13
- **Last Updated**: 2021-09-30
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# Logger Trace using the tutorial
项目为日志追踪项目(采用注解的方式,即插即用),通过`x-trace-id` request head 透传的方式,传递到相关联的项目,通过`x-trace-id`可追踪到整个调用链的日志,包括在项目内部(Method)
上记录的日志.项目依赖于logback、基于slf4j MDC的机制.
## Usage
### Maven
```xml
spring.boot.logging.trace
logging-trace
0.0.1
```
### SpringBoot Enable Configuration
```java
@SpringBootApplication
@EnableAsync
@EnableTraceAsyncConfiguration
@EnableLoggingTrace
public class SpringBootApplication {
public static void main(String[] args) {
SpringApplication.run(LxlActivityApplication.class, args);
}
}
```
- EnableLoggingTrace 代表启用Logging 日志追踪。
- EnableTraceAsyncConfiguration 增强EnableAsync日志,在异步调用中使用.
* EnableTraceAsyncConfiguration 已经帮助我们自动注入了Async线程池,无需再次配置。
可通过注解原信息配置调整相关参数。
- 自定义线程池的追踪ID传递方式.
```java
class ThreadPoolSimple{
private ThreadPoolExecutor executor = new ThreadPoolExecutor(2, 4, 1000, TimeUnit.MILLISECONDS, new LinkedBlockingDeque<>(10));
public void trace(){
//通过TraceRunnable透传父线程的追踪ID
executor.execute(new TraceRunnable(()-> log.info("再此执行异步业务")));
}
}
```
### Support Scheduled Configuration
```java
/**
* {@link org.springframework.scheduling.annotation.Scheduled} 增强日志追踪 .
* @author leo
*/
@Configuration
public class SchedulingConfiguration implements SchedulingConfigurer{
@Override
public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
taskRegistrar.setTaskScheduler(taskScheduler());
}
@Bean
public TaskScheduler taskScheduler(){
ThreadPoolTaskScheduler taskScheduler = new TraceLoggingSchedulingThreadPoolExecutor();
taskScheduler.setPoolSize(4);
taskScheduler.setThreadNamePrefix("Schedule-");
return taskScheduler;
}
}
```
### logback.xml Configuration
```xml
%d{yyyy-MM-dd HH:mm:ss.SSS}|%.-1level|%logger{0}|%X{tid}|%X{traceId}|%msg%n
```
- %X{tid} 代表的是当前线程ID
- %X{traceId} 代表的是当前追踪ID标识从请求到结束唯一的追踪标识符.
### Http Remote Invoker Tools
集成了追踪Http的工具类`AdvanceHttpUtils`.
#### HttpUtils 说明
- AdvanceHttpUtils 追踪增强类,针对调用项目需要传递追踪日志可以使用.
- SimpleHttpClient 普通Http请求,调用外部第三方可以使用.
- MultipartUploadHttpUtils 主要用用于Form表单提交附件上传,项目透传附件使用.
### Reference
- [Slf4j MDC 机制](https://www.jianshu.com/p/1dea7479eb07)
- [Logback MDC Simple](https://logback.qos.ch/xref/chapters/mdc/SimpleMDC.html)