248 Star 3K Fork 676

GVPdromara / TLog

 / 详情

可否加入显式开启MDC模式的配置

已完成
创建于  
2021-03-24 12:28

开发者好
想问一下,可否加入一个开关,用于控制tl属性是否加入到MDC内,该配置可由项目自行控制
因为我们目前绝大数的项目中,项目日志是通过项目上送至kafka,由logstash采集并推到es中的
我们使用的appdener是KafkaAppender,encoder使用的是net.logstash.logback.encoder.LogstashEncoder。
如果采用日志框架适配的模式,在es上就无法看到trace_id了 而字节码的形式虽然可以在es中看到trace_id 但是这些信息是在message中的,实际上不利于我们筛选,更希望trace_id能在字段中

查询了logstash-logback-encoder相关的文档,在
https://github.com/logstash/logstash-logback-encoder/tree/logstash-logback-encoder-6.6#mdc-fields
中看到,实际上logstash-logback-encoder默认会将所有MDC的变量作为JSON的字段的。
但翻了一下tlog的代码,实际上只有在任意的标签中存在有%X{tl}的占位符,才会将trace_id写入到MDC中

目前经过测试,如果标签中存在有%X{tl}的占位符,LogstashEncoder上送到kafka的字段里确实会多上tl的字段,因此可以实现我说的trace_id能在字段中的功能

但这个逻辑会显得有些复杂,不利于后续开发人员的维护,因为我们实际上是想将tl的变量加入到mdc中,本意并不想改变pattern,但实际上目前我们是通过改变pattern来实现tl变量加入到mdc中
因此想咨询一下 是否可以将mdc加入到变量中的开关独立出来,不受pattern中是否有占位符的限制?
谢谢

评论 (6)

xYohn 创建了任务
xYohn 关联仓库设置为dromara/TLog
展开全部操作日志

感谢反馈,目前tlog对于mdc这块的设计是,只有你在pattern中声明了%X{tl},并且使用了AspectLogbackEncoder ,满足这2个条件才可以把相关标签加入mdc
但是你这边,如果替换了encoder则无法上送kafka,用字节码形式,又无法在mdc中体现。不知道我理解的对不对

如果直接替换了encoder 上送到kafka的json串实际上就只有message了 缺少了很多字段信息
输入图片说明

如果是使用字节码的形式 可以实现 但是实际上是在message里的,在es中其实不好筛选
输入图片说明

目前我是在pattern中声明了%X{tl},在其他的appender中使用了AspectLogbackEncoder(以此来让变量加入到MDC内)使得LogstashEncoder在上送信息的时候获取MDC的内容然后加上tl的字段
输入图片说明

功能是可以实现的 但是我觉得有点绕了 因为我本意是要将变量加入到MDC中,但实际上我是通过在pattern中声明实现的
现在想的是 不知道其他场景下有没有也有这种 只需要将变量加入到MDC,但不需要改变pattern的场景
如果有的话 建议可能还是把这个开关单独做出来 因为感觉 改变pattern 和 在MDC中加入tl变量 这两者不应该强绑定 前者确实需要依赖后者 但是后者也可能需要独立使用在其他地方上
个人意见 仅供参考 谢谢

xYohn 修改了描述

理解了,可以做类似的开关。需要迭代一个版本来实现。感谢建议

好的谢谢 开关这里有个小细节是..如果用户配了pattern 又把mdc的开关 配置了关闭操作的话..
实际上pattern要依赖mdc,所以在配置了pattern的情况下 mdc开关应该是强制开启的哈 :laughing:

理解

感谢

铂赛东 添加了
 
enhancement
标签
铂赛东 添加了
 
feature
标签
xYohn 通过dromara/TLog Pull Request !15任务状态待办的 修改为已完成
铂赛东 任务状态已完成 修改为进行中
铂赛东 负责人设置为铂赛东
铂赛东 关联分支设置为v1.2.5
铂赛东 任务状态进行中 修改为已完成

登录 后才可以发表评论

状态
负责人
里程碑
Pull Requests
关联的 Pull Requests 被合并后可能会关闭此 issue
分支
开始日期   -   截止日期
-
置顶选项
优先级
参与者(2)
1102362 bryan31 1578940308 1804691 xyohn 1616658887
Java
1
https://gitee.com/dromara/TLog.git
git@gitee.com:dromara/TLog.git
dromara
TLog
TLog

搜索帮助