使用JSON配置log4j2

car*_*eld 3 json log4j2

我有以下简单的log4j2配置,它只是将消息记录到控制台stdout和一个文件:

<?xml version="1.0" encoding="UTF-8"?>
<Configuration>
    <Appenders>
        <RandomAccessFile name="FILE" fileName="app.log">
            <PatternLayout>
                <Pattern>%d %p %c{1.} [%t] %m%n</Pattern>
            </PatternLayout>
        </RandomAccessFile>
        <Console name="STDOUT" target="SYSTEM_OUT">
            <PatternLayout pattern="%m%n" />
        </Console>
    </Appenders>
    <Loggers>
        <Root level="trace">
            <AppenderRef ref="FILE" />
            <AppenderRef ref="STDOUT" />
        </Root>
    </Loggers>
</Configuration>
Run Code Online (Sandbox Code Playgroud)

它工作正常,但如果我改为JSON配置,如果不起作用,如果有人有任何线索?

{ "configuration": 
{ 
    "appenders": {
        "RandomAccessFile": { "name": "FILE", "fileName": "app.log",
            "PatternLayout": { "pattern": "%d %p %c{1.} [%t] %m%n" }
        },
        "Console": { "name": "STDOUT", 
            "PatternLayout": { "pattern": "%m%n" }
        }
    },
    "loggers": {
        "root": { "level": "trace", 
            "AppenderRef": { "ref": "STDOUT" }, 
            "AppenderRef": { "ref": "FILE" }
        }
    }
}
}
Run Code Online (Sandbox Code Playgroud)

Col*_*n D 5

log4j2 JSON(或任何JSON)不允许存在两个"AppenderRef"条目,因此您应该使用更像下面的配置

{ "configuration":
{
    "appenders": {
        "RandomAccessFile": { "name": "FILE", "fileName": "app.log",
            "PatternLayout": { "pattern": "%d %p %c{1.} [%t] %m%n" }
        },
        "Console": { "name": "STDOUT",
            "PatternLayout": { "pattern": "%m%n" }
        }
    },
    "loggers": {
        "root": { "level": "trace",
            "AppenderRef": [
                { "ref": "STDOUT" },
                { "ref": "FILE" }
            ]
        }
    }
}
}
Run Code Online (Sandbox Code Playgroud)

您也可以使用'appender-ref'代替AppenderRef