SkyWalking集成Logback的使用

SkyWalking集成Logback的使用

将微服务的日志框架去集成SkyWalking,我们希望在我们微服务中日志中,能够记录当前调用链路的id,然后我们再根据这个id去SkyWalking的前端界面中进行搜索找到对应的调用链路记录。

因为springboot默认实现的日志框架是logback,这里也就拿logback举例

  1. 引入logback相关maven依赖
<!-- skywalking 日志记录  -->
<dependency>
  <groupId>org.apache.skywalking</groupId>
  <artifactId>apm-toolkit-logback-1.x</artifactId>
  <version>8.5.0</version>
</dependency>
  1. 在项目中resources目录下创建logback-spring.xml文件,主要就是在日志的输出格式中添加[%X{tid}] 这个就是调用链路的id。
<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod=" 5 seconds">
    <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.mdc.TraceIdMDCPatternLogbackLayout">
                <Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%X{tid}] [%thread] %-5level %logger{36} -%msg%n</Pattern>
            </layout>
        </encoder>
    </appender>

    <appender name="ASYNC" class="ch.qos.logback.classic.AsyncAppender">
        <discardingThreshold>0</discardingThreshold>
        <queueSize>1024</queueSize>
        <neverBlock>true</neverBlock>
        <appender-ref ref="STDOUT"/>
    </appender>


    <appender name="grpc-log" 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.mdc.TraceIdMDCPatternLogbackLayout">
                <Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%X{tid}] [%thread] %-5level %logger{36} -%msg%n</Pattern>
            </layout>
        </encoder>
    </appender>

    <root level="INFO">
        <appender-ref ref="grpc-log" />
        <appender-ref ref="ASYNC"/>
    </root>
</configuration>
  1. 接入探针agent java探针 1)下载探针,根据Skywalking版本进行下载 https://archive.apache.org/dist/skywalking/java-agent/ 2)idea使用探针
-javaagent:D:Javapluginapache-skywalking-java-agent-8.9.0skywalking-agentskywalking-agent.jar 
-Dskywalking.agent.service_name=log-demo-service2 
-Dskywalking.collector.backend_service=192.168.0.203:11800

参数 说明 -javaagent:中下载的探针jar包位置 -Dskywalking.agent.service_name:在Skywalking中的服务名称,默认值为Your_ApplicationName -Dskywalking.collector.backend_service: Skywalking-oap服务地址,默认值为127.0.0.1:11800 如果在本地起的Skywalking-oap服务,则没必要配置此参数

  1. 如果Skywalking-oap服务不是部署在本地,需要在agent的config/agent.config文件中添加以下内容
plugin.toolkit.log.grpc.reporter.server_host=${SW_GRPC_LOG_SERVER_HOST:oap服务地址}
plugin.toolkit.log.grpc.reporter.server_port=${SW_GRPC_LOG_SERVER_PORT:11800}
plugin.toolkit.log.grpc.reporter.max_message_size=${SW_GRPC_LOG_MAX_MESSAGE_SIZE:10485760}
plugin.toolkit.log.grpc.reporter.upstream_timeout=${SW_GRPC_LOG_GRPC_UPSTREAM_TIMEOUT:30}

最终效果: 控制台日志: 刚开始服务启动时,没有调用接口,也就肯定没有链路追踪id,然后调用接口后就会在日志中有显示了 **注意:**只有在添加了VM参数配置了agent之后,才会显示TID,有很多教程没有提及这一点 skywalking-ui界面查看:

经验分享 程序员 微信小程序 职场和发展