为每条日志消息添加自定义值
Add custom value to every log message
假设我有一个端点 /user/{user_id}/foo
的 REST API。
现在,当它被调用时,我希望来自处理此请求的所有日志都包含有关 {user_id}
的信息。是否可以在不将 {user_id}
传递给每个方法的情况下实现这一目标?
我正在使用 SLF4j 进行日志记录,我的应用程序基于 Spring Boot。
您也可以为此使用 MDC,请参阅 here。它本质上是一张地图,您只需将上下文信息放入其中(例如用户 ID),然后您就可以在日志布局中使用它。请注意,这仅适用于某些底层框架,例如 logback,其中示例布局模式如下所示:
<Pattern>%X{user_id} %m%n</Pattern>
查看 logback manual 了解更多详细信息。
您可以使用 Logback 的 Mapped Diagnotic Context 将 {user_id}
传播到每个日志消息。
这有两个部分:
将您的 {user_id}
推入 MDC,例如MDC.put("user_id", "Pawel");
在您的日志语句中包含 MDC 条目。您可以通过在日志记录模式中指定它来做到这一点。因此,如果您将用户 ID 存储在名为 "user_id"
的 MDC 条目中,您将设置 logging.pattern.level=user_id:%X{user_id} %5p
以在每个日志事件中包含该条目的值。
更多详情in the docs
假设我有一个端点 /user/{user_id}/foo
的 REST API。
现在,当它被调用时,我希望来自处理此请求的所有日志都包含有关 {user_id}
的信息。是否可以在不将 {user_id}
传递给每个方法的情况下实现这一目标?
我正在使用 SLF4j 进行日志记录,我的应用程序基于 Spring Boot。
您也可以为此使用 MDC,请参阅 here。它本质上是一张地图,您只需将上下文信息放入其中(例如用户 ID),然后您就可以在日志布局中使用它。请注意,这仅适用于某些底层框架,例如 logback,其中示例布局模式如下所示:
<Pattern>%X{user_id} %m%n</Pattern>
查看 logback manual 了解更多详细信息。
您可以使用 Logback 的 Mapped Diagnotic Context 将 {user_id}
传播到每个日志消息。
这有两个部分:
将您的
{user_id}
推入 MDC,例如MDC.put("user_id", "Pawel");
在您的日志语句中包含 MDC 条目。您可以通过在日志记录模式中指定它来做到这一点。因此,如果您将用户 ID 存储在名为
"user_id"
的 MDC 条目中,您将设置logging.pattern.level=user_id:%X{user_id} %5p
以在每个日志事件中包含该条目的值。
更多详情in the docs