将log4j2包含到Maven项目中:如何让YamlConfigurationFactory查看其依赖项

时间:2014-11-14 17:24:12

标签: maven yaml log4j2

我想尝试将yAML配置文件与log4j2一起使用,但是log4j2无法加载配置,因为YamlConfigurationFactory无法从类路径中找到它的依赖项。

我的pom.xml的相关部分:

<dependencies>
    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-api</artifactId>
        <version>2.1</version>
    </dependency>
    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-core</artifactId>
        <version>2.1</version>
    </dependency>
</dependencies>

之后无效,我尝试将<dependencyManagement>部分添加到pom:

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-bom</artifactId>
            <version>2.1</version>
            <scope>import</scope>
            <type>pom</type>
        </dependency>
    </dependencies>
</dependencyManagement>

但这也没有帮助。谁知道什么是错的?

另外,如果有人能指出我对YAML log4j2配置的一个例子,那将非常感激。 (我只是觉得我会用这个做一个“快速”的实验,当然,它变成了时间的下沉...)

2 个答案:

答案 0 :(得分:1)

包括jackson-dataformat-yaml依赖是不够的。你还需要包括jackson-core和jackson-databind。

    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-core</artifactId>
        <version>2.4.2</version>
    </dependency>
    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-databind</artifactId>
        <version>2.4.2</version>
    </dependency>
    <dependency>
        <groupId>com.fasterxml.jackson.dataformat</groupId>
        <artifactId>jackson-dataformat-yaml</artifactId>
        <version>2.4.2</version>
    </dependency>

您可以在YAML配置工厂实现(org.apache.logging.log4j.core.config.yaml.YamlConfigurationFactory)中看到这些依赖项是硬编码的

private static final String[] dependencies = new String[] {
            "com.fasterxml.jackson.databind.ObjectMapper",
            "com.fasterxml.jackson.databind.JsonNode",
            "com.fasterxml.jackson.core.JsonParser",
            "com.fasterxml.jackson.dataformat.yaml.YAMLFactory"
    };

答案 1 :(得分:0)

我不是真正的maven用户,但我认为这里的问题是YAML支持是一个可选功能,所以它不会通过指定log4j依赖项自动引入。 Log4j Runtime Dependencies page列出Jackson YAML data format作为YAML配置支持所需的(唯一)依赖项。从那里引用maven依赖片段:

<dependency>
  <groupId>com.fasterxml.jackson.dataformat</groupId>
  <artifactId>jackson-dataformat-yaml</artifactId>
  <version>2.4.0</version>
</dependency>