SkyWalking集成Logback的使用
SkyWalking集成Logback的使用
将微服务的日志框架去集成SkyWalking,我们希望在我们微服务中日志中,能够记录当前调用链路的id,然后我们再根据这个id去SkyWalking的前端界面中进行搜索找到对应的调用链路记录。
因为springboot默认实现的日志框架是logback,这里也就拿logback举例
- 引入logback相关maven依赖
<!-- skywalking 日志记录 --> <dependency> <groupId>org.apache.skywalking</groupId> <artifactId>apm-toolkit-logback-1.x</artifactId> <version>8.5.0</version> </dependency>
- 在项目中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>
- 接入探针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服务,则没必要配置此参数
- 如果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界面查看: