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:\Java\plugin\apache-skywalking-java-agent-8.9.0\skywalking-agent\skywalking-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界面查看:

在这里插入图片描述

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐