如何向所有日志语句添加新的日志值
how to add new log value to all logging statements
我在 project.there 中使用带有 logback 的 slf4j 是一个 request_id 存储在 ThreadLoacal 中。
我想将这个请求 id 的值添加到所有日志语句中。
有没有什么方法可以让记录器隐式地获取 request_id 的值并记录它,而不是在现有的日志语句中传递它?
您应该可以使用自定义转换器执行此操作。
This Answer to another question 显示了如何使用转换器合并已保存在线程局部变量中的线程标识符。您应该能够对此进行调整以合并请求 ID。
This section of the logback manual 描述了如何将自定义转换器挂接到您的 logback 配置中。
Slf4j 和 logback 都支持使用映射诊断上下文 (MDC)。您可以将命名值添加到 MDC,这些值将传递给记录器。日志记录模式支持输出标记。
请注意,MDC 卡在您的线程中,即使用不同的线程时上下文会丢失。并且随着线程的重用,上下文会重新出现,所以在这种情况下清理很重要。
这可能很乏味,但是,我相信它会做到的
- 首先 configure sl4j logging 使用 JDK 记录器。
编写您自己的格式化程序,或像这样重写 Java SimpleFormatter:
package com.mypackage
public class MyFormatter extends SimpleFormatter{
@Override
public String format(LogRecord record){
String simpleFormattedLog = super.format(record);
String simpleFormattedLogWithThreadID = "THREAD_ID(" + getThreadId() + ") _ " + simpleFormattedLog;
return simpleFormattedLogWithThreadID;
}
private String getThreadId(){
return "GET THREAD ID HERE";
}
}
然后 specify the formatter in the properties file 为
java.util.logging.ConsoleHandler.formatter = com.mypackage.MyFormatter
这应该行得通,所有事情都是平等的。
我在 project.there 中使用带有 logback 的 slf4j 是一个 request_id 存储在 ThreadLoacal 中。 我想将这个请求 id 的值添加到所有日志语句中。 有没有什么方法可以让记录器隐式地获取 request_id 的值并记录它,而不是在现有的日志语句中传递它?
您应该可以使用自定义转换器执行此操作。
This Answer to another question 显示了如何使用转换器合并已保存在线程局部变量中的线程标识符。您应该能够对此进行调整以合并请求 ID。
This section of the logback manual 描述了如何将自定义转换器挂接到您的 logback 配置中。
Slf4j 和 logback 都支持使用映射诊断上下文 (MDC)。您可以将命名值添加到 MDC,这些值将传递给记录器。日志记录模式支持输出标记。
请注意,MDC 卡在您的线程中,即使用不同的线程时上下文会丢失。并且随着线程的重用,上下文会重新出现,所以在这种情况下清理很重要。
这可能很乏味,但是,我相信它会做到的
- 首先 configure sl4j logging 使用 JDK 记录器。
编写您自己的格式化程序,或像这样重写 Java SimpleFormatter:
package com.mypackage public class MyFormatter extends SimpleFormatter{ @Override public String format(LogRecord record){ String simpleFormattedLog = super.format(record); String simpleFormattedLogWithThreadID = "THREAD_ID(" + getThreadId() + ") _ " + simpleFormattedLog; return simpleFormattedLogWithThreadID; } private String getThreadId(){ return "GET THREAD ID HERE"; } }
然后 specify the formatter in the properties file 为
java.util.logging.ConsoleHandler.formatter = com.mypackage.MyFormatter
这应该行得通,所有事情都是平等的。