【问题标题】:Is there a way to print values in gRPC Context into logs using logback?有没有办法使用 logback 将 gRPC 上下文中的值打印到日志中?
【发布时间】:2019-04-03 08:21:09
【问题描述】:

我正在使用 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 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>

有没有办法像上面那样直接将上下文中的值打印到日志语句中?这甚至是在处理 gRPC 时考虑在日志中记录跟踪 id 的正确方法吗

【问题讨论】:

    标签: logback grpc grpc-java


    【解决方案1】:

    是的,通过使用上下文,您走在了正确的轨道上。这样做的方法是编写一个自定义布局(子类LayoutBase&lt;ILoggingEvent&gt;),它将查询上下文并将其写入日志。查询上下文的代码是:

    Span span = ContextUtils.getValue(Context.current());
    

    然后将其转换为字符串:

    span.getContext().getTraceId().toLowerBase16()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-04-03
      • 2012-03-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-27
      • 1970-01-01
      相关资源
      最近更新 更多