如何在Spring Sleuth中记录MDC?

4

我有一个基于Spring Boot和Sleuth的应用程序。目前一切正常。我现在的日志如下:

2017-05-04 17:55:52.226  INFO [alert,692d0eeca479e216,c3c8b680dc29ad02,false] 17292 --- [cTaskExecutor-1] c.k.a.b.s.alert.impl.AlertServiceImpl    : Alert state to process: xxx

现在,我想添加自定义MDC到我的日志,就像合同引用一样。我想要这样的日志:
2017-05-04 17:55:52.226  INFO [alert,692d0eeca479e216,c3c8b680dc29ad02,false] [CONTRACT_REF] 17292 --- [cTaskExecutor-1] c.k.a.b.s.alert.impl.AlertServiceImpl    : Alert state to process: xxx

我尝试了许多事情,但都没有成功:
  1. 使用Spring Sleuth Tracer添加标签;
  2. 在我的application.properties文件中添加logging.pattern.level=%5p %mdc和MDC.put(xxx, xxx)
如何向我的日志中添加自定义MDC/标记?

请问能否分享一些最简单的代码? - SkyWalker
2个回答

4

在2.x版本之前,您需要创建自己的SpanLogger实现。最简单的方法是扩展Slf4jSpanLogger并提供自己的代码来添加/更新和删除MDC上下文中的条目。接着,您可以更改日志格式,这样您的日志将包含所需的内容。


我应该在span中放置一个标签,然后在设置Slf4jSpanLogger中使用此标签记录吗? - Konstantin Zyubin
嗨,@Marcin Grzejszczak 我正在使用Spring Boot 2.2.5,我该如何实现这个功能? - Elia Rohana

0

通过使用MDC.put("yourCoolKey", "your cool value")(参见MDC.put JavaDoc),我很容易地向MDC添加了数据。

一旦您将值放入MDC中,您就可以在日志模式(在我的情况下,是logging.pattern.console的值)中使用序列%X{yourCoolKey}来打印字符串"your cool value"作为每个日志语句的一部分。

可选地,您可以在密钥后添加:-<defaultValue>来指定模式字符串中的默认值,例如%X{yourCoolKey:-N/A},这将在"yourCoolKey"的条目不存在时打印字符串"N/A"。如果未指定,则默认为空字符串("")。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接