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 44 <dependency>
45 45 <groupId>io.opentracing</groupId>
46 46 <artifactId>opentracing-util</artifactId>
  47 + <optional>true</optional>
47 48 </dependency>
48 49 <dependency>
49 50 <groupId>org.apache.skywalking</groupId>
50 51 <artifactId>apm-toolkit-trace</artifactId>
  52 + <optional>true</optional>
51 53 </dependency>
52 54 <dependency>
53 55 <groupId>org.apache.skywalking</groupId>
54 56 <artifactId>apm-toolkit-logback-1.x</artifactId>
  57 + <optional>true</optional>
55 58 </dependency>
56 59 <dependency>
57 60 <groupId>org.apache.skywalking</groupId>
58 61 <artifactId>apm-toolkit-opentracing</artifactId>
  62 + <optional>true</optional>
59 63 </dependency>
60 64  
61 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 3 import cn.iocoder.yudao.framework.common.enums.WebFilterOrderEnum;
4 4 import cn.iocoder.yudao.framework.tracer.core.aop.BizTraceAspect;
5 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 9 import org.springframework.boot.autoconfigure.AutoConfiguration;
7 10 import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
8 11 import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
... ... @@ -16,30 +19,32 @@ import org.springframework.context.annotation.Bean;
16 19 * @author mashu
17 20 */
18 21 @AutoConfiguration
19   -@ConditionalOnClass({BizTraceAspect.class})
  22 +@ConditionalOnClass(name = {
  23 + "org.apache.skywalking.apm.toolkit.opentracing.SkywalkingTracer",
  24 + "io.opentracing.Tracer"
  25 +})
20 26 @EnableConfigurationProperties(TracerProperties.class)
21 27 @ConditionalOnProperty(prefix = "yudao.tracer", value = "enable", matchIfMissing = true)
22 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 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 59 /**
60 60 * 轨迹发生时间
61 61 */
62   - @JsonProperty("time")
63 62 @JsonFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND, timezone = TIME_ZONE_DEFAULT)
64 63 @JsonDeserialize(using = LocalDateTimeDeserializer.class)
65 64 private LocalDateTime time;
... ...
yudao-server/src/main/resources/logback-spring.xml
1 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 8 <!-- 控制台 Appender -->
10 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 12 </encoder>
16 13 </appender>
17 14  
18 15 <!-- 文件 Appender -->
19 16 <!-- 参考 Spring Boot 的 file-appender.xml 编写 -->
20 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 20 </encoder>
26 21 <!-- 日志文件名 -->
27 22 <file>${LOG_FILE}</file>
  23 + <!-- 滚动策略:基于【每天 + 大小】创建日志文件 -->
28 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 28 </rollingPolicy>
40 29 </appender>
41 30 <!-- 异步写入日志,提升性能 -->
42 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 34 <appender-ref ref="FILE"/>
48 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 40 <encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
53 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 43 </layout>
56 44 </encoder>
57 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 56 </configuration>
... ...