[英]Structured Stackdriver logs - adding MDC to logs
向日志添加了 MDC,以便能夠在 Stackdriver Dashboard 和 Logging Console 中跟蹤特定的錯誤日志。 當前的實現在本地機器上運行良好,但在雲上卻不是 - 只是不要將我的 MDC 包含到日志條目中。 問題是我根本無法弄清楚可能是什么問題。
本地日志輸出(包含“contextKey”:“someValue”):
{"traceId":"615b35dc7f639027","spanId":"615b35dc7f639027","spanExportable":"false","contextKey":"someValue","timestampSeconds":1552311117,"timestampNanos":665000000,"severity":"ERROR","thread":"reactor-http-nio-3","logger":"com.example.someservice.controller.MyController", ...}
同一服務的 Kubernetes 容器日志(此日志條目中沒有 "contextKey": "someValue"):
{"traceId":"8d7287fa0ebdacfce9b88097e290ecbf","spanId":"96967afbe05dbf0e","spanExportable":"false","X-B3-ParentSpanId":"224dcb9869488858","parentId":"224dcb9869488858","timestampSeconds":1552312549,"timestampNanos":752000000,"severity":"ERROR","thread":"reactor-http-epoll-2","logger":"com.example.someservice.controller.MyController","message":"Something went wrong","context":"default","logging.googleapis.com/trace":"projects/my-project/traces/8d7287fa0ebdacfce9b88097e290ecbf","logging.googleapis.com/spanId":"96967afbe05dbf0e"}
我的 logback.xml:
<configuration>
<appender name="CONSOLE_JSON" class="ch.qos.logback.core.ConsoleAppender">
<encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
<layout class="org.springframework.cloud.gcp.autoconfigure.logging.StackdriverJsonLayout">
<projectId>${projectId}</projectId>
</layout>
</encoder>
</appender>
<springProfile name="local,dev,test">
<root level="INFO">
<appender-ref ref="CONSOLE_JSON"/>
</root>
</springProfile>
</configuration>
使用定義的 MDC 觸發日志創建的控制器:
@RestController
@RequestMapping("v1/my-way")
@Slf4j
public class MyController {
@GetMapping
public void read() {
MDC.put("contextKey", "someValue");
log.error("Something went wrong");
MDC.remove("contextKey")
}
}
您的 MDC 字段應該在日志實體的“標簽”節點上可用。 你去那里檢查了嗎?
同樣在日志查看器中的 Google 控制台中,設置 MDC 字段以顯示在日志記錄中也很不錯。 對於該設置“labels.YouCustomMDCField:在查看選項 -> 修改自定義字段(在屏幕右上角)
更新:但是,您使用與我不同的方法來登錄 Stackdriver。 我正在使用
<appender name="STACKDRIVER" class="com.google.cloud.logging.logback.LoggingAppender">
<log>
${log_file_name}
</log>
</appender>
它可以解決問題(我也有 Spring)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.