java - 如何在 Java 中向单例 SLF4J 记录器添加动态元数据?

标签 java logback slf4j

这是一个Java问题。

我有大约 100 个使用 slf4j 记录器的静态函数。 我想添加一些元数据来标准化日志 - 假设它是某种序言,它是当前正在进行的处理的函数。 如何让记录器打印该元数据,而无需进入每个静态函数并将它们更改为显式添加元数据。

例如


static Logger logger; ...
void mainProcessing() {
String file = "current_file.txt";
int line = 3;
...
func1();
func2();
...

}

void func1() {
...
logger.warn("some warning");
}

我希望在日志中看到“警告:文件 current_file.txt,第 3 行,消息:一些警告”

有什么想法吗?

(如果可能的话,最好不必明显更改每个 func1() 函数)

提前致谢。

最佳答案

您需要指定打印格式。但请注意,获取行号和/或文件将大大降低您的应用程序性能。这不是 C++,Logback 可能会为每一行创建一个 Throwable 对象,以检索堆栈跟踪并提取行号和文件名。

关于线路:

L / line Outputs the line number from where the logging request was issued.

Generating the line number information is not particularly fast. Thus, its use should be avoided unless execution speed is not an issue.

关于文件:

F / file Outputs the file name of the Java source file where the logging request was issued.

Generating the file information is not particularly fast. Thus, its use should be avoided unless execution speed is not an issue.

http://logback.qos.ch/manual/layouts.html#file

示例 logback.xml 配置为:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>

  <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
    <encoder>
      <pattern>%d{"yy-MM-dd HH:mm:ss,SSS"}: %-5p %F:%L [%t] %c{0}: %M - %m%n</pattern>
    </encoder>
  </appender>

  <root level="INFO">
    <appender-ref ref="console" />
  </root>
</configuration>

最好重新设计代码,因为消息更详细不唯一,包含上下文和调试所需的数据不太了解代码的人(你 future 的同事)

关于java - 如何在 Java 中向单例 SLF4J 记录器添加动态元数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60185724/

相关文章:

java - 在 apache Kafka 中禁用 SLF4J 日志记录

java - 限制数组中的小数位

java - 处理所有异常

java - 如何使用 OSGi 片段包注册自定义 Logback 过滤器?

java - 记录器格式和 throwable、slf4j、参数

scala - 未检测到项目中的 SLF4J : simplelogger. 属性

java - Java 有静态泛型参数的好方法吗?

java - 无法从静态上下文引用非静态方法 getAssets (Java)(Android)

java - 如何阻止 JComponent 清除?

java - logback.xml : overriding root level for one class only