Commit 529c570bbd7b700785f1297d8b47e56ff07c8088

Authored by YunaiV
1 parent 28965b9b

reactor:优化日志格式,解决 FILE 里存在 highlight、cyan高亮

reactor:弱化对 skywalking 依赖,可按需引入,更灵活
yudao-framework/yudao-spring-boot-starter-monitor/pom.xml
@@ -44,18 +44,22 @@ @@ -44,18 +44,22 @@
44 <dependency> 44 <dependency>
45 <groupId>io.opentracing</groupId> 45 <groupId>io.opentracing</groupId>
46 <artifactId>opentracing-util</artifactId> 46 <artifactId>opentracing-util</artifactId>
  47 + <optional>true</optional>
47 </dependency> 48 </dependency>
48 <dependency> 49 <dependency>
49 <groupId>org.apache.skywalking</groupId> 50 <groupId>org.apache.skywalking</groupId>
50 <artifactId>apm-toolkit-trace</artifactId> 51 <artifactId>apm-toolkit-trace</artifactId>
  52 + <optional>true</optional>
51 </dependency> 53 </dependency>
52 <dependency> 54 <dependency>
53 <groupId>org.apache.skywalking</groupId> 55 <groupId>org.apache.skywalking</groupId>
54 <artifactId>apm-toolkit-logback-1.x</artifactId> 56 <artifactId>apm-toolkit-logback-1.x</artifactId>
  57 + <optional>true</optional>
55 </dependency> 58 </dependency>
56 <dependency> 59 <dependency>
57 <groupId>org.apache.skywalking</groupId> 60 <groupId>org.apache.skywalking</groupId>
58 <artifactId>apm-toolkit-opentracing</artifactId> 61 <artifactId>apm-toolkit-opentracing</artifactId>
  62 + <optional>true</optional>
59 </dependency> 63 </dependency>
60 64
61 <!-- Micrometer 对 Prometheus 的支持 --> 65 <!-- Micrometer 对 Prometheus 的支持 -->
yudao-framework/yudao-spring-boot-starter-monitor/src/main/java/cn/iocoder/yudao/framework/tracer/config/YudaoTracerAutoConfiguration.java
@@ -3,6 +3,9 @@ package cn.iocoder.yudao.framework.tracer.config; @@ -3,6 +3,9 @@ package cn.iocoder.yudao.framework.tracer.config;
3 import cn.iocoder.yudao.framework.common.enums.WebFilterOrderEnum; 3 import cn.iocoder.yudao.framework.common.enums.WebFilterOrderEnum;
4 import cn.iocoder.yudao.framework.tracer.core.aop.BizTraceAspect; 4 import cn.iocoder.yudao.framework.tracer.core.aop.BizTraceAspect;
5 import cn.iocoder.yudao.framework.tracer.core.filter.TraceFilter; 5 import cn.iocoder.yudao.framework.tracer.core.filter.TraceFilter;
  6 +import io.opentracing.Tracer;
  7 +import io.opentracing.util.GlobalTracer;
  8 +import org.apache.skywalking.apm.toolkit.opentracing.SkywalkingTracer;
6 import org.springframework.boot.autoconfigure.AutoConfiguration; 9 import org.springframework.boot.autoconfigure.AutoConfiguration;
7 import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; 10 import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
8 import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; 11 import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
@@ -16,30 +19,32 @@ import org.springframework.context.annotation.Bean; @@ -16,30 +19,32 @@ import org.springframework.context.annotation.Bean;
16 * @author mashu 19 * @author mashu
17 */ 20 */
18 @AutoConfiguration 21 @AutoConfiguration
19 -@ConditionalOnClass({BizTraceAspect.class}) 22 +@ConditionalOnClass(name = {
  23 + "org.apache.skywalking.apm.toolkit.opentracing.SkywalkingTracer",
  24 + "io.opentracing.Tracer"
  25 +})
20 @EnableConfigurationProperties(TracerProperties.class) 26 @EnableConfigurationProperties(TracerProperties.class)
21 @ConditionalOnProperty(prefix = "yudao.tracer", value = "enable", matchIfMissing = true) 27 @ConditionalOnProperty(prefix = "yudao.tracer", value = "enable", matchIfMissing = true)
22 public class YudaoTracerAutoConfiguration { 28 public class YudaoTracerAutoConfiguration {
23 29
24 - // TODO @芋艿:重要。目前 opentracing 版本存在冲突,要么保证 skywalking,要么保证阿里云短信 sdk  
25 -// @Bean  
26 -// public TracerProperties bizTracerProperties() {  
27 -// return new TracerProperties();  
28 -// }  
29 -//  
30 -// @Bean  
31 -// public BizTraceAspect bizTracingAop() {  
32 -// return new BizTraceAspect(tracer());  
33 -// }  
34 -//  
35 -// @Bean  
36 -// public Tracer tracer() {  
37 -// // 创建 SkywalkingTracer 对象  
38 -// SkywalkingTracer tracer = new SkywalkingTracer();  
39 -// // 设置为 GlobalTracer 的追踪器  
40 -// GlobalTracer.register(tracer);  
41 -// return tracer;  
42 -// } 30 + @Bean
  31 + public TracerProperties bizTracerProperties() {
  32 + return new TracerProperties();
  33 + }
  34 +
  35 + @Bean
  36 + public BizTraceAspect bizTracingAop() {
  37 + return new BizTraceAspect(tracer());
  38 + }
  39 +
  40 + @Bean
  41 + public Tracer tracer() {
  42 + // 创建 SkywalkingTracer 对象
  43 + SkywalkingTracer tracer = new SkywalkingTracer();
  44 + // 设置为 GlobalTracer 的追踪器
  45 + GlobalTracer.registerIfAbsent(tracer);
  46 + return tracer;
  47 + }
43 48
44 /** 49 /**
45 * 创建 TraceFilter 过滤器,响应 header 设置 traceId 50 * 创建 TraceFilter 过滤器,响应 header 设置 traceId
yudao-module-mall/yudao-module-trade/src/main/java/cn/iocoder/yudao/module/trade/framework/delivery/core/client/dto/kd100/Kd100ExpressQueryRespDTO.java
@@ -59,7 +59,6 @@ public class Kd100ExpressQueryRespDTO { @@ -59,7 +59,6 @@ public class Kd100ExpressQueryRespDTO {
59 /** 59 /**
60 * 轨迹发生时间 60 * 轨迹发生时间
61 */ 61 */
62 - @JsonProperty("time")  
63 @JsonFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND, timezone = TIME_ZONE_DEFAULT) 62 @JsonFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND, timezone = TIME_ZONE_DEFAULT)
64 @JsonDeserialize(using = LocalDateTimeDeserializer.class) 63 @JsonDeserialize(using = LocalDateTimeDeserializer.class)
65 private LocalDateTime time; 64 private LocalDateTime time;
yudao-server/src/main/resources/logback-spring.xml
1 <configuration> 1 <configuration>
2 - <!-- 引用 Spring Boot 的 logback 基础配置 -->  
3 - <include resource="org/springframework/boot/logging/logback/defaults.xml" />  
4 - <!-- 变量 yudao.info.base-package,基础业务包 -->  
5 - <springProperty scope="context" name="yudao.info.base-package" source="yudao.info.base-package"/>  
6 - <!-- 格式化输出:%d 表示日期,%X{tid} SkWalking 链路追踪编号,%thread 表示线程名,%-5level:级别从左显示 5 个字符宽度,%msg:日志消息,%n是换行符 -->  
7 - <property name="PATTERN_DEFAULT" value="%d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd HH:mm:ss.SSS}} | %highlight(${LOG_LEVEL_PATTERN:-%5p} ${PID:- }) | %boldYellow(%thread [%tid]) %boldGreen(%-40.40logger{39}) | %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}"/> 2 + <!-- 参考 org/springframework/boot/logging/logback/defaults.xml 配置,优化 CONSOLE_LOG_PATTERN、FILE_LOG_PATTERN -->
  3 + <!-- 格式化输出:%d 表示日期,%thread 表示线程名,%-5level:级别从左显示 5 个字符宽度,%msg:日志消息,%n是换行符 -->
  4 + <!-- CONSOLE_LOG_PATTERN 相比 FILE_LOG_PATTERN 多了 highlight、cyan 等高亮 -->
  5 + <property name="CONSOLE_LOG_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %highlight(%-5level) %cyan(%logger{50}:%L) - %msg%n"/>
  6 + <property name="FILE_LOG_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50}:%L - %msg%n"/>
8 7
9 <!-- 控制台 Appender --> 8 <!-- 控制台 Appender -->
10 <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">      9 <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">     
11 - <encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">  
12 - <layout class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.TraceIdPatternLogbackLayout">  
13 - <pattern>${PATTERN_DEFAULT}</pattern>  
14 - </layout> 10 + <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
  11 + <pattern>${CONSOLE_LOG_PATTERN}</pattern>
15 </encoder> 12 </encoder>
16 </appender> 13 </appender>
17 14
18 <!-- 文件 Appender --> 15 <!-- 文件 Appender -->
19 <!-- 参考 Spring Boot 的 file-appender.xml 编写 --> 16 <!-- 参考 Spring Boot 的 file-appender.xml 编写 -->
20 <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> 17 <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
21 - <encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">  
22 - <layout class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.TraceIdPatternLogbackLayout">  
23 - <pattern>${PATTERN_DEFAULT}</pattern>  
24 - </layout> 18 + <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
  19 + <pattern>${FILE_LOG_PATTERN}</pattern>
25 </encoder> 20 </encoder>
26 <!-- 日志文件名 --> 21 <!-- 日志文件名 -->
27 <file>${LOG_FILE}</file> 22 <file>${LOG_FILE}</file>
  23 + <!-- 滚动策略:基于【每天 + 大小】创建日志文件 -->
28 <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> 24 <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
29 - <!-- 滚动后的日志文件名 -->  
30 - <fileNamePattern>${LOGBACK_ROLLINGPOLICY_FILE_NAME_PATTERN:-${LOG_FILE}.%d{yyyy-MM-dd}.%i.gz}</fileNamePattern>  
31 - <!-- 启动服务时,是否清理历史日志,一般不建议清理 -->  
32 - <cleanHistoryOnStart>${LOGBACK_ROLLINGPOLICY_CLEAN_HISTORY_ON_START:-false}</cleanHistoryOnStart>  
33 - <!-- 日志文件,到达多少容量,进行滚动 -->  
34 - <maxFileSize>${LOGBACK_ROLLINGPOLICY_MAX_FILE_SIZE:-10MB}</maxFileSize>  
35 - <!-- 日志文件的总大小,0 表示不限制 -->  
36 - <totalSizeCap>${LOGBACK_ROLLINGPOLICY_TOTAL_SIZE_CAP:-0}</totalSizeCap>  
37 - <!-- 日志文件的保留天数 -->  
38 - <maxHistory>${LOGBACK_ROLLINGPOLICY_MAX_HISTORY:-30}</maxHistory> 25 + <fileNamePattern>${LOG_FILE}.%d{yyyy-MM-dd}.%i.log</fileNamePattern> <!-- 日志文件输出的文件名 -->
  26 + <maxHistory>30</maxHistory> <!-- 日志文件的保留天数 -->
  27 + <maxFileSize>10MB</maxFileSize> <!-- 日志文件,到达多少容量,进行滚动 -->
39 </rollingPolicy> 28 </rollingPolicy>
40 </appender> 29 </appender>
41 <!-- 异步写入日志,提升性能 --> 30 <!-- 异步写入日志,提升性能 -->
42 <appender name="ASYNC" class="ch.qos.logback.classic.AsyncAppender"> 31 <appender name="ASYNC" class="ch.qos.logback.classic.AsyncAppender">
43 - <!-- 不丢失日志。默认的,如果队列的 80% 已满,则会丢弃 TRACT、DEBUG、INFO 级别的日志 -->  
44 - <discardingThreshold>0</discardingThreshold>  
45 - <!-- 更改默认的队列的深度,该值会影响性能。默认值为 256 -->  
46 - <queueSize>256</queueSize> 32 + <discardingThreshold>0</discardingThreshold> <!-- 不丢失日志。默认的,如果队列的 80% 已满,则会丢弃 TRACT、DEBUG、INFO 级别的日志 -->
  33 + <queueSize>512</queueSize> <!-- 更改默认的队列的深度,该值会影响性能。默认值为 256 -->
47 <appender-ref ref="FILE"/> 34 <appender-ref ref="FILE"/>
48 </appender> 35 </appender>
49 36
50 - <!-- SkyWalking GRPC 日志收集,实现日志中心。注意:SkyWalking 8.4.0 版本开始支持 -->  
51 - <appender name="GRPC" class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.log.GRPCLogClientAppender"> 37 + <!-- SkyWalking Appender:GRPC 日志收集,实现日志中心 -->
  38 + <!--
  39 + <appender name="SKYWALKING" class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.log.GRPCLogClientAppender">
52 <encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder"> 40 <encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
53 <layout class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.TraceIdPatternLogbackLayout"> 41 <layout class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.TraceIdPatternLogbackLayout">
54 - <pattern>${PATTERN_DEFAULT}</pattern> 42 + <pattern>[%tid] ${FILE_LOG_PATTERN}</pattern>
55 </layout> 43 </layout>
56 </encoder> 44 </encoder>
57 </appender> 45 </appender>
  46 + -->
58 47
59 - <!-- 本地环境 -->  
60 - <springProfile name="local">  
61 - <root level="INFO">  
62 - <appender-ref ref="STDOUT"/>  
63 - <appender-ref ref="GRPC"/> <!-- 本地环境下,如果不想接入 SkyWalking 日志服务,可以注释掉本行 -->  
64 - <appender-ref ref="ASYNC"/> <!-- 本地环境下,如果不想打印日志,可以注释掉本行 -->  
65 - </root>  
66 - </springProfile>  
67 - <!-- 其它环境 -->  
68 - <springProfile name="dev,test,stage,prod,default">  
69 - <root level="INFO">  
70 - <appender-ref ref="STDOUT"/>  
71 - <appender-ref ref="ASYNC"/>  
72 - <appender-ref ref="GRPC"/>  
73 - </root>  
74 - </springProfile> 48 + <root level="INFO">
  49 + <appender-ref ref="STDOUT"/>
  50 + <!-- 本地环境下,如果不想【FILE】打印日志,可以注释掉本行 -->
  51 + <appender-ref ref="ASYNC"/>
  52 + <!-- 如果想接入【SkyWalking 日志服务】,可以取消注释掉本行 -->
  53 + <!-- <appender-ref ref="SKYWALKING"/> -->
  54 + </root>
75 55
76 </configuration> 56 </configuration>