开发者好
想问一下,可否加入一个开关,用于控制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中是否有占位符的限制?
谢谢
感谢反馈,目前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变量 这两者不应该强绑定 前者确实需要依赖后者 但是后者也可能需要独立使用在其他地方上
个人意见 仅供参考 谢谢
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。
理解了,可以做类似的开关。需要迭代一个版本来实现。感谢建议
登录 后才可以发表评论