springboot项目日志格式化并整合skywalking

794 阅读1分钟

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(-&#45;&#45;) 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