繁体   English   中英

如何将动态元数据添加到 Java 中的单例 SLF4J 记录器?

[英]How to add dynamic metadata to a singleton SLF4J logger in Java?

这是一个Java问题。

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

例如


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

}

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

我想在日志中看到"WARN: File current_file.txt, line 3, msg: some warning"

有任何想法吗?

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

提前致谢。

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

关于线路:

L / line 输出发出日志请求的行号。

生成行号信息并不是特别快。 因此,除非执行速度不是问题,否则应避免使用它。

关于文件:

F / file 输出发出日志请求的 Java 源文件的文件名。

生成文件信息并不是特别快。 因此,除非执行速度不是问题,否则应避免使用它。

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>

最好重新设计您的代码,该消息更加冗长且不唯一,包含上下文和所需数据,以便由不太了解代码的人(您未来的同事)进行调试

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM