我正在使用gRPC编写新的微服务。传统上,在记录日志时,我曾经在logback的MDC中填充跟踪ID,logback配置直接负责在所有log语句中打印跟踪id。使用gRPC时,我利用了Context来设置跟踪ID,但无法找到一种使用logback配置文件直接对其进行记录的方法。
我发现Context是通过此链接How to intercept the headers from in call to one service and insert it to another request in gRPC-java?
进行此操作的正确位置在我用来从Java项目中的Logback的MDC打印值的模式下查找。
<Pattern>%date{dd-MM-yyyy;HH:mm:ss.SSS}|[%mdc{CLIENT-ID}]|[%mdc{REQ-ID}]|[%thread] %-5level %logger{36} - %msg%n
</Pattern>
是否有一种方法可以像上面一样直接将Context中的值打印到日志语句中?这甚至是在处理gRPC时考虑在日志中记录跟踪ID的正确方法
答案 0 :(得分:0)
是的,使用上下文可以使您处于正确的轨道。做到这一点的方法是编写一个自定义布局(子类supportedProfile
),该布局将查询上下文并将其写入日志。用于查询上下文的代码是:
LayoutBase<ILoggingEvent>
然后将其转换为字符串:
Span span = ContextUtils.getValue(Context.current());