logback - 有没有办法使用 logback 将 gRPC 上下文中的值打印到日志中?
问题描述
我正在使用 gRPC 编写一个新的微服务。传统上,在记录时,我曾经在 logback 的 MDC 中填充跟踪 ID,而 logback 配置直接负责在所有日志语句中打印跟踪 ID。使用 gRPC,我使用 Context 设置跟踪 ID,但无法找到使用 logback 配置文件直接记录它们的方法。
我认为 Context 是从此链接执行此操作的正确位置How to intercept the headers from in call to one service and insert it into 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>
有没有办法像上面一样直接将上下文中的值打印到日志语句中?这甚至是在处理 gRPC 时考虑在日志中记录跟踪 id 的正确方法吗
解决方案
是的,通过使用上下文,您走在了正确的轨道上。这样做的方法是编写一个自定义布局(子类LayoutBase<ILoggingEvent>
),它将查询上下文并将其写入日志。查询上下文的代码是:
Span span = ContextUtils.getValue(Context.current());
然后将其转换为字符串:
span.getContext().getTraceId().toLowerBase16()
推荐阅读
- python - 如何根据值拆分数组或列表
- r - Spread won't work? Error: Each row of output must be identified by a unique combination of keys
- bash - 获取 youtube 前端代理链接的目标 url
- python - 如何从 for 循环中的数字 1 开始?
- ubuntu-18.04 - ubuntu 更新报错,无法安装最新版本的nodejs
- vba - 如何将循环输入更改为接受来自访问的列表或表格输入的循环输入?
- azure-devops - Azure DevOps 自定义工作项 - 创建者字段验证问题
- java - Spring MVC + Thymeleaf 将单个对象发布到控制器
- r - lapply() 输出为多个函数的数据帧 - R
- mysql-workbench - 如何使用 SQLworkbench 解决问题?