Jelajahi Sumber

feat: 增强JSON日志输出功能

lixuesong 2 minggu lalu
induk
melakukan
c3696d4873

+ 12 - 1
yyc-common-log/src/main/resources/net/yyc/common/log/json-file-appenders.xml

@@ -12,7 +12,14 @@
              </root>
          堆栈:stack_trace 字段完整不截断(6.6 默认 ExtendedThrowableProxyConverter,显式声明锁死,
          升级 encoder 7.4+ 时其默认会变为 ShortenedThrowableConverter 截断堆栈);
-         另输出 stack_frames 帧数组便于 SLS 按帧检索。 -->
+         另输出 stack_frames 帧数组便于 SLS 按帧检索。
+         调用位置:CallerDataJsonProvider 输出 caller_class_name / caller_method_name /
+         caller_file_name / caller_line_number(日志语句所在源文件与行号,便于从 SLS 回溯到代码);
+         因 debug/error 文本 appender 已含 %file:%line,caller data 本就被计算,无额外开销。
+         物理文件:customFields 输出 log_file(本行写入时的活动文件完整路径)。
+         滚动归档后定位规则:日志按 @timestamp 的日期归档到
+         {log.path}/json/{yyyy-MM}/{log_file 文件名去掉 .log}.{yyyy-MM-dd}.{i}.log.gz
+         (同一天仅一个文件时 i=0;单日超 50MB 会有多个 i,按时间戳在归档内检索)。 -->
     <appender name="debug-json" class="ch.qos.logback.core.rolling.RollingFileAppender">
         <file>${log.path}/json/debug.log</file>
         <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
@@ -25,11 +32,13 @@
         <append>true</append>
         <encoder class="net.logstash.logback.encoder.LogstashEncoder">
             <throwableConverter class="ch.qos.logback.classic.pattern.ExtendedThrowableProxyConverter"/>
+            <provider class="net.logstash.logback.composite.loggingevent.CallerDataJsonProvider"/>
             <provider class="net.yyc.common.log.logback.StackTraceFramesJsonProvider"/>
             <fieldNames>
                 <version>[ignore]</version>
                 <levelValue>[ignore]</levelValue>
             </fieldNames>
+            <customFields>{"log_file":"${log.path}/json/debug.log"}</customFields>
         </encoder>
     </appender>
 
@@ -45,11 +54,13 @@
         <append>true</append>
         <encoder class="net.logstash.logback.encoder.LogstashEncoder">
             <throwableConverter class="ch.qos.logback.classic.pattern.ExtendedThrowableProxyConverter"/>
+            <provider class="net.logstash.logback.composite.loggingevent.CallerDataJsonProvider"/>
             <provider class="net.yyc.common.log.logback.StackTraceFramesJsonProvider"/>
             <fieldNames>
                 <version>[ignore]</version>
                 <levelValue>[ignore]</levelValue>
             </fieldNames>
+            <customFields>{"log_file":"${log.path}/json/error.log"}</customFields>
         </encoder>
         <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
             <level>ERROR</level>