Browse Source

reactor:优化日志格式,解决 FILE 里存在 highlight、cyan高亮
reactor:弱化对 skywalking 依赖,可按需引入,更灵活

YunaiV 3 months ago
parent
commit
529c570bbd

+ 4 - 0
yudao-framework/yudao-spring-boot-starter-monitor/pom.xml

@@ -44,18 +44,22 @@
         <dependency>
             <groupId>io.opentracing</groupId>
             <artifactId>opentracing-util</artifactId>
+            <optional>true</optional>
         </dependency>
         <dependency>
             <groupId>org.apache.skywalking</groupId>
             <artifactId>apm-toolkit-trace</artifactId>
+            <optional>true</optional>
         </dependency>
         <dependency>
             <groupId>org.apache.skywalking</groupId>
             <artifactId>apm-toolkit-logback-1.x</artifactId>
+            <optional>true</optional>
         </dependency>
         <dependency>
             <groupId>org.apache.skywalking</groupId>
             <artifactId>apm-toolkit-opentracing</artifactId>
+            <optional>true</optional>
         </dependency>
 
         <!-- Micrometer 对 Prometheus 的支持 -->

+ 25 - 20
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;
 import cn.iocoder.yudao.framework.common.enums.WebFilterOrderEnum;
 import cn.iocoder.yudao.framework.tracer.core.aop.BizTraceAspect;
 import cn.iocoder.yudao.framework.tracer.core.filter.TraceFilter;
+import io.opentracing.Tracer;
+import io.opentracing.util.GlobalTracer;
+import org.apache.skywalking.apm.toolkit.opentracing.SkywalkingTracer;
 import org.springframework.boot.autoconfigure.AutoConfiguration;
 import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
 import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
@@ -16,30 +19,32 @@ import org.springframework.context.annotation.Bean;
  * @author mashu
  */
 @AutoConfiguration
-@ConditionalOnClass({BizTraceAspect.class})
+@ConditionalOnClass(name = {
+        "org.apache.skywalking.apm.toolkit.opentracing.SkywalkingTracer",
+        "io.opentracing.Tracer"
+})
 @EnableConfigurationProperties(TracerProperties.class)
 @ConditionalOnProperty(prefix = "yudao.tracer", value = "enable", matchIfMissing = true)
 public class YudaoTracerAutoConfiguration {
 
-    // TODO @芋艿:重要。目前 opentracing 版本存在冲突,要么保证 skywalking,要么保证阿里云短信 sdk
-//    @Bean
-//    public TracerProperties bizTracerProperties() {
-//        return new TracerProperties();
-//    }
-//
-//    @Bean
-//    public BizTraceAspect bizTracingAop() {
-//        return new BizTraceAspect(tracer());
-//    }
-//
-//    @Bean
-//    public Tracer tracer() {
-//        // 创建 SkywalkingTracer 对象
-//        SkywalkingTracer tracer = new SkywalkingTracer();
-//        // 设置为 GlobalTracer 的追踪器
-//        GlobalTracer.register(tracer);
-//        return tracer;
-//    }
+    @Bean
+    public TracerProperties bizTracerProperties() {
+        return new TracerProperties();
+    }
+
+    @Bean
+    public BizTraceAspect bizTracingAop() {
+        return new BizTraceAspect(tracer());
+    }
+
+    @Bean
+    public Tracer tracer() {
+        // 创建 SkywalkingTracer 对象
+        SkywalkingTracer tracer = new SkywalkingTracer();
+        // 设置为 GlobalTracer 的追踪器
+        GlobalTracer.registerIfAbsent(tracer);
+        return tracer;
+    }
 
     /**
      * 创建 TraceFilter 过滤器,响应 header 设置 traceId

+ 0 - 1
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 {
         /**
          * 轨迹发生时间
          */
-        @JsonProperty("time")
         @JsonFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND, timezone = TIME_ZONE_DEFAULT)
         @JsonDeserialize(using = LocalDateTimeDeserializer.class)
         private LocalDateTime time;

+ 27 - 47
yudao-server/src/main/resources/logback-spring.xml

@@ -1,76 +1,56 @@
 <configuration>
-    <!-- 引用 Spring Boot 的 logback 基础配置 -->
-    <include resource="org/springframework/boot/logging/logback/defaults.xml" />
-    <!-- 变量 yudao.info.base-package,基础业务包 -->
-    <springProperty scope="context" name="yudao.info.base-package" source="yudao.info.base-package"/>
-    <!-- 格式化输出:%d 表示日期,%X{tid} SkWalking 链路追踪编号,%thread 表示线程名,%-5level:级别从左显示 5 个字符宽度,%msg:日志消息,%n是换行符 -->
-    <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}"/>
+    <!-- 参考 org/springframework/boot/logging/logback/defaults.xml 配置,优化 CONSOLE_LOG_PATTERN、FILE_LOG_PATTERN -->
+    <!-- 格式化输出:%d 表示日期,%thread 表示线程名,%-5level:级别从左显示 5 个字符宽度,%msg:日志消息,%n是换行符 -->
+    <!-- CONSOLE_LOG_PATTERN 相比 FILE_LOG_PATTERN 多了 highlight、cyan 等高亮 -->
+    <property name="CONSOLE_LOG_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %highlight(%-5level) %cyan(%logger{50}:%L) - %msg%n"/>
+    <property name="FILE_LOG_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50}:%L - %msg%n"/>
 
     <!-- 控制台 Appender -->
     <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">     
-        <encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
-            <layout class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.TraceIdPatternLogbackLayout">
-                <pattern>${PATTERN_DEFAULT}</pattern>
-            </layout>
+        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
+            <pattern>${CONSOLE_LOG_PATTERN}</pattern>
         </encoder>
     </appender>
 
     <!-- 文件 Appender -->
     <!-- 参考 Spring Boot 的 file-appender.xml 编写 -->
     <appender name="FILE"  class="ch.qos.logback.core.rolling.RollingFileAppender">
-        <encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
-            <layout class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.TraceIdPatternLogbackLayout">
-                <pattern>${PATTERN_DEFAULT}</pattern>
-            </layout>
+        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
+            <pattern>${FILE_LOG_PATTERN}</pattern>
         </encoder>
         <!-- 日志文件名 -->
         <file>${LOG_FILE}</file>
+        <!-- 滚动策略:基于【每天 + 大小】创建日志文件 -->
         <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
-            <!-- 滚动后的日志文件名 -->
-            <fileNamePattern>${LOGBACK_ROLLINGPOLICY_FILE_NAME_PATTERN:-${LOG_FILE}.%d{yyyy-MM-dd}.%i.gz}</fileNamePattern>
-            <!-- 启动服务时,是否清理历史日志,一般不建议清理 -->
-            <cleanHistoryOnStart>${LOGBACK_ROLLINGPOLICY_CLEAN_HISTORY_ON_START:-false}</cleanHistoryOnStart>
-            <!-- 日志文件,到达多少容量,进行滚动 -->
-            <maxFileSize>${LOGBACK_ROLLINGPOLICY_MAX_FILE_SIZE:-10MB}</maxFileSize>
-            <!-- 日志文件的总大小,0 表示不限制 -->
-            <totalSizeCap>${LOGBACK_ROLLINGPOLICY_TOTAL_SIZE_CAP:-0}</totalSizeCap>
-            <!-- 日志文件的保留天数 -->
-            <maxHistory>${LOGBACK_ROLLINGPOLICY_MAX_HISTORY:-30}</maxHistory>
+            <fileNamePattern>${LOG_FILE}.%d{yyyy-MM-dd}.%i.log</fileNamePattern> <!-- 日志文件输出的文件名 -->
+            <maxHistory>30</maxHistory> <!-- 日志文件的保留天数 -->
+            <maxFileSize>10MB</maxFileSize> <!-- 日志文件,到达多少容量,进行滚动 -->
         </rollingPolicy>
     </appender>
     <!-- 异步写入日志,提升性能 -->
     <appender name="ASYNC" class="ch.qos.logback.classic.AsyncAppender">
-        <!-- 不丢失日志。默认的,如果队列的 80% 已满,则会丢弃 TRACT、DEBUG、INFO 级别的日志 -->
-        <discardingThreshold>0</discardingThreshold>
-        <!-- 更改默认的队列的深度,该值会影响性能。默认值为 256 -->
-        <queueSize>256</queueSize>
+        <discardingThreshold>0</discardingThreshold> <!-- 不丢失日志。默认的,如果队列的 80% 已满,则会丢弃 TRACT、DEBUG、INFO 级别的日志 -->
+        <queueSize>512</queueSize> <!-- 更改默认的队列的深度,该值会影响性能。默认值为 256 -->
         <appender-ref ref="FILE"/>
     </appender>
 
-    <!-- SkyWalking GRPC 日志收集,实现日志中心。注意:SkyWalking 8.4.0 版本开始支持 -->
-    <appender name="GRPC" class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.log.GRPCLogClientAppender">
+    <!-- SkyWalking Appender:GRPC 日志收集,实现日志中心 -->
+    <!--
+    <appender name="SKYWALKING" class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.log.GRPCLogClientAppender">
         <encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
             <layout class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.TraceIdPatternLogbackLayout">
-                <pattern>${PATTERN_DEFAULT}</pattern>
+                <pattern>[%tid] ${FILE_LOG_PATTERN}</pattern>
             </layout>
         </encoder>
     </appender>
+    -->
 
-    <!-- 本地环境 -->
-    <springProfile name="local">
-        <root level="INFO">
-            <appender-ref ref="STDOUT"/>
-            <appender-ref ref="GRPC"/> <!-- 本地环境下,如果不想接入 SkyWalking 日志服务,可以注释掉本行 -->
-            <appender-ref ref="ASYNC"/>  <!-- 本地环境下,如果不想打印日志,可以注释掉本行 -->
-        </root>
-    </springProfile>
-    <!-- 其它环境 -->
-    <springProfile name="dev,test,stage,prod,default">
-        <root level="INFO">
-            <appender-ref ref="STDOUT"/>
-            <appender-ref ref="ASYNC"/>
-            <appender-ref ref="GRPC"/>
-        </root>
-    </springProfile>
+    <root level="INFO">
+        <appender-ref ref="STDOUT"/>
+        <!-- 本地环境下,如果不想【FILE】打印日志,可以注释掉本行 -->
+        <appender-ref ref="ASYNC"/>
+        <!-- 如果想接入【SkyWalking 日志服务】,可以取消注释掉本行 -->
+        <!-- <appender-ref ref="SKYWALKING"/> -->
+    </root>
 
 </configuration>