为每条日志消息添加自定义值

时间:2017-10-02 13:12:34

标签: java spring-boot slf4j

我们说我有一个端点为/user/{user_id}/foo的REST API。 现在,当它被调用时,我希望处理此请求的所有日志都包含有关{user_id}的信息。是否有可能在不将{user_id}传递给每个方法的情况下实现这一目标?

我使用SLF4j进行日志记录,我的应用程序基于Spring Boot。

2 个答案:

答案 0 :(得分:2)

您也可以使用MDC,请参阅here。它本质上是一张地图,您只需将上下文信息放入其中(例如用户ID),然后就可以在日志布局中使用它。请注意,这仅适用于某些底层框架,如logback,其中示例布局模式如下所示:

<Pattern>%X{user_id} %m%n</Pattern>

查看logback manual了解详情。

答案 1 :(得分:1)

您可以使用Logback的Mapped Diagnotic Context{user_id}传播到每条日志消息。

这有两个部分:

  • 将您的{user_id}推送到MDC,例如MDC.put("user_id", "Pawel");

  • 在日志语句中包含MDC条目。您可以通过在日志模式中指定它来执行此操作。因此,如果将用户标识存储在名为"user_id"的MDC条目中,则应将logging.pattern.level=user_id:%X{user_id} %5p设置为在每个日志事件中包含该条目的值。

更多详情in the docs