Log4j 2 JSON配置

我有一个XML配置,我想转换为JSON。 Log4j没有加载JSON版本,我找不到任何拼写错误。 我的测试代码只记录ERROR级别和DEBUG级别消息。 只显示ERROR消息并且没有生成文件输出 – 我假设框架回退到默认初始化而不是JSON文件。

注意:log4j2-test.json文件位于类路径中。

我在这里使用的是apache-log4j-2.0-beta9二进制文件。

XML配置如下:

    ${sys:user.home}/logs test.log        %d %p %logger{36} [%t] %m%n               

和JSON配置是:

 { "configuration": { "name": "Default", "properties": { "property": { "name":"Directory", "value":"${sys:user.home}/logs" }, "property": { "name":"FileName", "value":"test.log" } }, "appenders": { "Console": { "name":"Console", "target":"SYSTEM_OUT", "PatternLayout": { "pattern":"%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" } }, "RollingFile": { "name":"File", "fileName":"${Directory}/${FileName}", "filePattern":"${Directory}/${date:yyyy-MM}/test-%d{MM-dd-yyyy}-%i.log.gz", "PatternLayout": { "pattern":"%d %p %logger{36} [%t] %m%n" }, "Policies": { "SizeBasedTriggeringPolicy": { "size":"1 MB" } }, "DefaultRolloverStrategy": { "max":"10" } } }, "loggers": { "root": { "level":"debug", "appender-ref": { "ref":"Console" }, "appender-ref": { "ref":"File" } } } } } 

我找到了问题的解决方案。

事实certificate, Log4j 2配置并未记录所有必需的依赖项:

JSON支持使用Jackson数据处理器来解析JSON文件。 必须将这些依赖项添加到要使用JSON进行配置的项目中:

  com.fasterxml.jackson.core jackson-core 2.8.7   com.fasterxml.jackson.core jackson-databind 2.8.7   com.fasterxml.jackson.core jackson-annotations 2.8.7  

我相信我对发布的JSON配置进行了额外的更正。 对我来说,这部分会产生问题:

  "properties": { "property": { "name":"Directory", "value":"${sys:user.home}/logs" }, "property": { "name":"FileName", "value":"test.log" } }, 

在我的设置中,这将输出〜/ logs / $ {FileName}或〜/ $ {Directory} /test.log,这意味着它只是插入其中一个属性而不是两者。

我从中得出结论,JSON格式没有正确指定属性。 为了解决这个问题,我将属性指定为JSON数组

  "properties": { "property": [{ "name":"Directory", "value":"${sys:user.home}/logs" }, { "name":"FileName", "value":"test.log" }] }, 

有了这个,它似乎解决了问题,并正确输出到〜/ logs / test.log

我的设置是Mac上的log4j2 2.0.2,带有tomcat 7.0.55

你有另一个可能会抓住你的缺陷,我已经遇到了log4j json。

 "appender-ref": { "ref":"Console" }, "appender-ref": { "ref":"File" } 

试试这个,就像现在一样,它只会捕获一个appender。

 "appender-ref": [{ "ref":"Console" }, { "ref":"File" }]