1. 程式人生 > >《Log4j官方文件》 JSON配置

《Log4j官方文件》 JSON配置

Log4j不僅能通過XML配置,也能通過JSON配置。如你所知,JSON的格式非常類似於緊湊版XML。每個鍵代表了外掛名稱,對應的值是屬性。鍵中可以有子級外掛。如下,“ThresholdFilter, Console, PatternLayout”都是外掛。Console的值是“STDOUT”,意為日誌控制檯輸出;“ThresholdFilter”的值是被設為除錯級。


{ "configuration": { "status": "error", "name": "RoutingTest",
"packages": "org.apache.logging.log4j.test",
"properties": {
"property": { "name": "filename",
"value" : "target/rolling1/rollingtest-$${sd:type}.log" }
},
"ThresholdFilter": { "level": "debug" },
"appenders": {
"Console": { "name": "STDOUT",
"PatternLayout": { "pattern": "%m%n" }
},
"List": { "name": "List",
"ThresholdFilter": { "level": "debug" }
},
"Routing": { "name": "Routing",
"Routes": { "pattern": "$${sd:type}",
"Route": [
{
"RollingFile": {
"name": "Rolling-${sd:type}", "fileName": "${filename}",
"filePattern": "target/rolling1/test1-${sd:type}.%i.log.gz",
"PatternLayout": {"pattern": "%d %p %c{1.} [%t] %m%n"},
"SizeBasedTriggeringPolicy": { "size": "500" }
}
},
{ "AppenderRef": "STDOUT", "key": "Audit"},
{ "AppenderRef": "List", "key": "Service"}
]
}
}
},
"loggers": {
"logger": { "name": "EventLogger", "level": "info", "additivity": "false",
"AppenderRef": { "ref": "Routing" }},
"root": { "level": "error", "AppenderRef": { "ref": "STDOUT" }}
}
}
}


注意,在路徑追加器中,“Route”元素被宣告為陣列,這是可行的,因為每個陣列元素都是“Route”。然而,在單純的追加器和過濾器中就不行了,因為在JSON格式裡,每個元素都有不同的名稱。只有當追加器和過濾器宣告是型別的時候,它們才可以由陣列定義。如下展現了通過陣列定義了多路logger。
{ “configuration”: { “status”: “debug”, “name”: “RoutingTest”,
“packages”: “org.apache.logging.log4j.test”,
“properties”: {
“property”: { “name”: “filename”,
“value” : “target/rolling1/rollingtest-$${sd:type}.log” }
},
“ThresholdFilter”: { “level”: “debug” },
“appenders”: {
“appender”: [
{ “type”: “Console”, “name”: “STDOUT”, “PatternLayout”: { “pattern”: “%m%n” }},
{ “type”: “List”, “name”: “List”, “ThresholdFilter”: { “level”: “debug” }},
{ “type”: “Routing”, “name”: “Routing”,
“Routes”: { “pattern”: “$${sd:type}”,
“Route”: [
{
“RollingFile”: {
“name”: “Rolling-${sd:type}”, “fileName”: “${filename}”,
“filePattern”: “target/rolling1/test1-${sd:type}.%i.log.gz”,
“PatternLayout”: {“pattern”: “%d %p %c{1.} [%t] %m%n”},
“SizeBasedTriggeringPolicy”: { “size”: “500” }
}
},
{ “AppenderRef”: “STDOUT”, “key”: “Audit”},
{ “AppenderRef”: “List”, “key”: “Service”}
]
}
}
]
},
“loggers”: {
“logger”: [
{ “name”: “EventLogger”, “level”: “info”, “additivity”: “false”,
“AppenderRef”: { “ref”: “Routing” }},
{ “name”: “com.foo.bar”, “level”: “error”, “additivity”: “false”,
“AppenderRef”: { “ref”: “Console” }}
],
“root”: { “level”: “error”, “AppenderRef”: { “ref”: “STDOUT” }}
}
}
}

通過Jackson資料處理器來提供JSON檔案的解析支援。你需要給專案新增如下依賴:

com.fasterxml.jackson.core
jackson-core
2.8.3

com.fasterxml.jackson.core
jackson-databind
2.8.3

com.fasterxml.jackson.core
jackson-annotations
2.8.3