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

4
假设我有一个REST API,其端点为/user/{user_id}/foo。现在当调用它时,我希望所有处理此请求的日志都包含关于{user_id}的信息。是否可能在不将{user_id}传递到每个方法的情况下实现这一点?
我正在使用SLF4j进行日志记录,我的应用程序基于Spring Boot。

1
您可能想要使用SLF4J的MDC系统,请参见此处:https://stackoverflow.com/questions/32591068/adding-context-path-to-slf4j-log-statements - Arnaud
2个回答

5
您也可以使用MDC来实现此功能,详见这里。它本质上是一个映射表,您只需将上下文信息(例如用户ID)放入其中,然后即可在日志布局中使用。请注意,这仅适用于某些底层框架,例如logback,在其中示例布局模式如下:
<Pattern>%X{user_id} %m%n</Pattern>

请查看logback手册以获取更多有关此事的详细信息。


3
您可以使用Logback的映射诊断上下文{user_id}传播到每个日志消息中。
这有两个部分:
1. 将{user_id}推入MDC中,例如MDC.put("user_id", "Pawel"); 2. 在日志语句中包含MDC条目。您可以通过在日志模式中指定它来实现。因此,如果您将用户ID存储在名为"user_id"的MDC条目中,则应设置logging.pattern.level=user_id:%X{user_id} %5p以在每个日志事件中包含该条目的值。
更多细节请参见文档

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