博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Logback获取SkyWalking的全局唯一标识 trace-id 记录到日志中
阅读量:5360 次
发布时间:2019-06-15

本文共 1488 字,大约阅读时间需要 4 分钟。

为什么要获取trace-id

通过上文我们搭建了SkyWalking服务,我们需要在日志中记录下来每次请求的唯一标识(trace-id),这样就可以在SkyWalking定位到有问题的trace-id,然后通过这个trace-id我们就可以通过日志系统去定位到相关的日志,从而发现并解决问题。

最开始和我说想法的老哥,想自己实现一套trace-id,以便满足于如果想替换追踪工具,不用改太多代码。想法是很好的,但是经过查询SkyWalking的GIT issue ,发现SW并没有提供这种自定义trace-id的功能,

决定获取SW生成的全局trace-id,这里主要是记录下实现方式,这里使用了开源组件完成的效果

配置过程

在pom中添加依赖

org.apache.skywalking
apm-toolkit-logback-1.x
6.2.0

这是一个skywalking的工具,通过这个工具可以得到trace-id

修改logback.xml中的Appender的Pattern

%d{HH:mm:ss.SSS} [%thread] %-5level logger_name:%logger{36} - [%tid] - message:%msg%n

这里需要注意的是

  • Logback中的encoder本身是包含一个layout的,在有此Appender中是可以直接用encoder中的layout部分的,鉴于本人使用的是Kafka-appender这个插件,尽量通用就写成这样了。
  • encoder的class是LayoutWrappingEncoder,不是PatternLayoutEncoder!
  • 使用%tid 来占trace-id的位置,默认TID:N/A,当有请求调用时,会显示trace-id
  • 这种方式支持探针与注解

测试

使用探针参数添加到LogDemo中测试,Demo地址: ,注意分支

Java只需要在VM options中追加格式为

-javaagent:/path/to/path/skywalking-agent.jar -Dskywalking.agent.service_name=YOUR_APP_NAME -Dskywalking.collector.backend_service=OAP_SEVER_HOST:gRPC_PORT

举例如下:

-javaagent:D:/skywalking-agent/skywalking-agent.jar -Dskywalking.agent.service_name=logDemo -Dskywalking.collector.backend_service=10.2.7.70:11800

启动项目,如果没有kafka输出,可以注释掉,只留下console输出

我们可以看到默认的启动打出的日志是这样的

1149398-20190710163116575-15404369.png

访问测试接口,查看日志

1149398-20190710163255357-1263460434.png

引用文章

感觉不美观可以自行修改,本文内容以上。

转载于:https://www.cnblogs.com/hellxz/p/logback_skywalking_trace_id.html

你可能感兴趣的文章
洛谷 P1303 A*B Problem
查看>>
创建函数还有一种方法
查看>>
返回绝对值--Math.Abs 方法
查看>>
教你控制 RecyclerView 滑动的节奏
查看>>
冲刺周2
查看>>
静态库lib、动态库dll基础
查看>>
day22 Python shelve模块
查看>>
Promise.race
查看>>
sigleSchool 存储过程例1
查看>>
linux下mysql开启远程访问权限及防火墙开放3306端口
查看>>
开发项目中遇到的问题集锦随时更新
查看>>
C语言中的未初始化变量的值
查看>>
二叉查找树(查找最大值、最小值、给定值、删除给定值的实现)
查看>>
HDU 6397(容斥原理)
查看>>
Spring中配置文件中引用外部文件
查看>>
java中有关初始化的问题
查看>>
【转】除锈的机器是啥原理?
查看>>
基本数据类型和操作
查看>>
Android开发所有视频教程汇总
查看>>
Java Hashtable遍历与方法使用
查看>>