Commit 529c570bbd7b700785f1297d8b47e56ff07c8088
1 parent
28965b9b
reactor:优化日志格式,解决 FILE 里存在 highlight、cyan高亮
reactor:弱化对 skywalking 依赖,可按需引入,更灵活
Showing
4 changed files
with
56 additions
and
68 deletions
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> | ... | ... |