簡體   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