pom文件
<!-- 日志格式化依赖-->
<dependency>
<groupId>net.logstash.logback</groupId>
<artifactId>logstash-logback-encoder</artifactId>
<version>${logstash.version}</version>
</dependency>
<!-- skywalking依赖-->
<dependency>
<groupId>org.apache.skywalking</groupId>
<artifactId>apm-toolkit-logback-1.x</artifactId>
<version>8.4.0</version>
</dependency>
logback.xml
<springProperty scop="context" name="log.format" source="log.format" defaultValue="normal"/>
<springProperty scop="context" name="system.namespace" source="server.namespace" defaultValue="default-namespace"/>
<springProperty scop="context" name="spring.application.name" source="spring.application.name" defaultValue="default-application-name"/>
<timestamp key="byDay" datePattern="yyyy-MM-dd" />
<property name="LOG_PATTERN" value="[%date %-5level] %msg \t\t\t\t{@ %logger} %n" />
<property name="SQL_LOG_PATTERN" value="[SQL日志] %msg \t\t\t\t\t\t\t\t[%date %-5level]{@ %logger}%n" />
<!-- Skywalking相关参数 -->
<!-- add converter for %tid traceId-->
<conversionRule conversionWord="tid" converterClass="org.apache.skywalking.apm.toolkit.log.logback.v1.x.LogbackPatternConverter"/>
<!-- add converter for %sw_ctx -->
<!-- <conversionRule conversionWord="sw_ctx" converterClass="org.apache.skywalking.apm.toolkit.log.logback.v1.x.LogbackSkyWalkingContextPatternConverter"/>-->
<!--SQL日志控制台写入器-->
<appender name="SQLOut" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>${LOG_PATTERN}</pattern>
</encoder>
</appender>
<!-- 控制台日志输出 -->
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<if condition='property("log.format").contains("json")'>
<then>
<encoder charset="UTF-8" class="net.logstash.logback.encoder.LogstashEncoder">
<!-- add TID(traceId) field -->
<provider class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.logstash.TraceIdJsonProvider">
</provider>
<!-- add SW_CTX(SkyWalking context) field -->
<!-- <provider class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.logstash.SkyWalkingContextJsonProvider">-->
<!-- </provider>-->
</encoder>
<encoder class="net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder">
<providers>
<pattern>
<pattern>
{
"system":"${system.namespace}",
"service":"${spring.application.name}",
"timestamp":"%date{"yyyy-MM-dd'T'HH:mm:ss,SSSXXX", UTC}",
"trace_id":"%tid",
"level":"%level",
"thread":"%thread",
"class":"%file:%line",
"logger":"%logger",
"message":"%msg",
"stack_trace": "%exception{150}"
}
</pattern>
</pattern>
</providers>
</encoder>
</then>
</if>
<if condition='property("log.format").contains("normal")'>
<then>
<encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
<!-- <encoder>-->
<layout class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.TraceIdPatternLogbackLayout">
<pattern>[%tid] ${LOG_PATTERN}</pattern>
<!-- <pattern>${LOG_PATTERN}</pattern>-->
<!-- <pattern>[%tid] $CONSOLE_LOG_PATTERN:-%clr(%d$LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd HH:mm:ss.SSS)faint %clr($LOG_LEVEL_PATTERN:-%5p) %clr($PID:- )magenta %clr(---) faint %clr([%15.15t])faint %clr(%-40.40logger39)cyan %clr(:)faint %m%n$LOG_EXCEPTION_CONVERSION_WORD:-%wEx</pattern>-->
</layout>
</encoder>
</then>
</if>
</appender>
<!-- 各个启动环境配置-->
<springProfile name="dev">
<root level="INFO">
<appender-ref ref="STDOUT" />
<appender-ref ref="DBOut" />
</root>
<logger name="group.rober.sql" level="INFO" additivity="false">
<appender-ref ref="SQLOut" />
<appender-ref ref="DBOut" />
</logger>
<logger name="org.springframework.jdbc.core.JdbcTemplate" level="INFO" additivity="false">
<appender-ref ref="SQLOut" />
<appender-ref ref="DBOut" />
</logger>
<logger name="org.springframework.jdbc.core.StatementCreatorUtils" level="INFO" additivity="false" >
<appender-ref ref="SQLOut" />
<appender-ref ref="DBOut" />
</logger>
</springProfile>
注:如果是本地启动,可能获取不到traceId,需要配置编译器的VM options参数
-javaagent:D:\skywalking-agent\skywalking-agent.jar