如何將自定義參數添加到Log4j2的JSONLAYOUT?Log4J2 JSONLAYOUT如何添加自定義參數
還有一種方法可以將模式添加到JSONLAYOUT的消息元素?
我試圖在這裏列出的選項 - >
logging.apache.org/log4j/2.x/manual/layouts.html#JSONLayout
請幫幫忙!
如何將自定義參數添加到Log4j2的JSONLAYOUT?Log4J2 JSONLAYOUT如何添加自定義參數
還有一種方法可以將模式添加到JSONLAYOUT的消息元素?
我試圖在這裏列出的選項 - >
logging.apache.org/log4j/2.x/manual/layouts.html#JSONLayout
請幫幫忙!
據我所知,您正在尋找一種方法來定製JSONLayout
的JSON輸出格式,方式類似於您可以通過指定「轉換模式」來自定義PatternLayout
。
我相信答案是你不能以相同的方式定製JSONLayout
。您可以可以選擇您想要包含在郵件中的各種信息。例如,示出了documentation等properties
參數:
如果爲真,在附加器包括在所生成的JSON線程上下文映射。默認爲false。
因此,您可以設置各種參數以包含某些類型的信息,但是您不能直接控制包含的特定項目。
你可能做的是使用ObjectMessage
以及JSON庫來生成JSON消息。但是,這會在JSON中生成JSON(假設您仍然希望使用JSONLayout
這種方法)。下面是一些示例代碼來說明:
一類與主方法,以產生一個日誌消息:
package example;
import java.util.HashMap;
import java.util.Map;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.json.JSONObject;
public class JsonMessageExample {
private static final Logger log = LogManager.getLogger();
public static void main(String[] args) {
Map<String,String> msgMap = new HashMap<>();
msgMap.put("myKey", "myValue");
JSONObject message = new JSONObject(msgMap);
log.info(message);
}
}
的log4j2.xml配置文件:
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
<JSONLayout/>
</Console>
</Appenders>
<Loggers>
<Root level="debug">
<AppenderRef ref="Console"/>
</Root>
</Loggers>
</Configuration>
從上述輸出:
{
"timeMillis" : 1510429852038,
"thread" : "main",
"level" : "INFO",
"loggerName" : "example.JsonMessageExample",
"message" : "{\"myKey\":\"myValue\"}",
"endOfBatch" : false,
"loggerFqcn" : "org.apache.logging.log4j.spi.AbstractLogger",
"threadId" : 1,
"threadPriority" : 5
}
正如您所看到的,消息名稱值對具有一個值爲JSON字符串的值。爲了解析這個,你必須將外部對象解析爲JSON,拉取消息字段,然後將其值解析爲JSON。
然而,如果使用不同的佈局,例如一個非常基本的PatternLayout
這樣的:<PatternLayout pattern="%m%n"/>
您將能夠產生只有一個級別JSON輸出,因此只需要解析一次。但是,您必須編寫邏輯來獲取所需的信息並將其填入地圖(和JSON對象),因爲現在您只需簡單地轉儲地圖的內容即可。使用相同的Java代碼與佈局
示例輸出變爲PatternLayout
如上所述:
{"myKey":"myValue"}
編輯:
,如果你想用你甚至可以這樣做以下PatternLayout
的「轉換模式」,以JSON格式輸出日誌,而不必編寫邏輯來獲取一些具體信息:
<PatternLayout pattern="{"timeMillis":"%d{UNIX_MILLIS}","thread":"%t","level":"%p","loggerName":"%c","message":%m}%n"/>
示例輸出:
{ 「timeMillis」: 「1510455694601」, 「線程」: 「主」, 「水平」: 「信息」, 「loggerName」: 「example.JsonMessageExample」,」消息「:{」myKey「:」myValue「}}
https://logging.apache.org/log4j/2.x/manual/layouts.html#JSONLayout –
@DB謝謝。我已經檢查了正確的鏈接,並沒有找到如何添加自定義參數。問題是關於添加自定義參數,這在該鏈接中未提及。 – TuneIt
您能否通過添加自定義參數來澄清您的意思? –