log4j不僅能通過xml配置,也能通過json配置。如你所知,json的格式非常類似于緊湊版xml。每個鍵代表了插件名稱,對應的值是屬性。鍵中可以有子級插件。如下,“thresholdfilter, console, patternlayout”都是插件。console的值是“stdout”,意為日志控制台輸出;“thresholdfilter”的值是被設為調試級。
<code>{ "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" }} } } }</code>
注意,在路徑追加器中,“route”元素被聲明為數組,這是可行的,因為每個數組元素都是“route”。然而,在單純的追加器和過濾器中就不行了,因為在json格式裡,每個元素都有不同的名稱。隻有當追加器和過濾器聲明是類型的時候,它們才可以由數組定義。如下展現了通過數組定義了多路logger。
<code></code>{ “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檔案的解析支援。你需要給項目添加如下依賴:
<code></code>
<code>com.fasterxml.jackson.core jackson-core 2.8.3</code>
<code>com.fasterxml.jackson.core jackson-databind 2.8.3</code>
<code>com.fasterxml.jackson.core jackson-annotations 2.8.3</code>