Log4j2无法使用json配置文件

时间:2015-08-28 11:02:57

标签: java json intellij-idea log4j kotlin

似乎log4j试图通过XML解析器解析.json配置文件,但为什么呢?

我通过命令行参数设置log4j配置文件:

-Dlog4j.configurationFile=src/log4j2.json

文件内容:

{
    "configuration": {
        "appenders": {
            "Console": {
                "name": "Console",
                "target": "SYSTEM_OUT",
                "PatternLayout": {
                    "pattern": "%date %thread %logger %message"
                }
            }
        },
        "loggers": {
            "root": {
                "level": "debug",
                "appender-ref": {
                    "ref": "Console"
                }
            }
        }
    }
}

我得到了什么:

[Fatal Error] log4j2.json:1:1: Content is not allowed in prolog.
ERROR StatusLogger Error parsing D:\Dev\HDelphiCrawler\src\log4j2.json org.xml.sax.SAXParseException; systemId: file:///D:/Dev/HDelphiCrawler/src/log4j2.json; lineNumber: 1; columnNumber: 1; Content is not allowed in prolog.
    at com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(DOMParser.java:257)
    at com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:348)
    at org.apache.logging.log4j.core.config.xml.XmlConfiguration.<init>(XmlConfiguration.java:140)
    at org.apache.logging.log4j.core.config.xml.XmlConfigurationFactory.getConfiguration(XmlConfigurationFactory.java:44)
    at org.apache.logging.log4j.core.config.ConfigurationFactory$Factory.getConfiguration(ConfigurationFactory.java:410)
    ....and so on...
ERROR StatusLogger No logging configuration

我的lib文件夹中的Jars:

  • hamcrest-的junit-2.0.0.0.jar
  • 杰克逊 - 注解-2.6.1.jar
  • 杰克逊 - 芯 - 2.6.1.jar
  • 杰克逊 - 数据绑定-2.6.1.jar
  • java的hamcrest-2.0.0.0.jar
  • 的junit-4.12.jar
  • 科特林-reflect.jar
  • 科特林-运行时sources.jar
  • 科特林-runtime.jar
  • 的log4j-API-2.3.jar
  • log4j的核-2.3.jar
  • 的log4j-SLF4J-IMPL-2.3.jar

2 个答案:

答案 0 :(得分:1)

您可以使用系统属性log4j.configurationFactory

-Dlog4j.configurationFactory=org.apache.logging.log4j.core.config.json.JsonConfigurationFactory

答案 1 :(得分:0)

即使已经有一个可接受的答案,我也将发布解决方案。也许这对以后的人有帮助...

它对我不起作用的原因是我没有jackson-corejackson-databind库。在我添加

之后
compile 'com.fasterxml.jackson.core:jackson-core:2.8.7'
compile 'com.fasterxml.jackson.core:jackson-databind:2.6.2'

在我的build.gradle文件中,一切正常。