我想尝试将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配置的一个例子,那将非常感激。 (我只是觉得我会用这个做一个“快速”的实验,当然,它变成了时间的下沉...)
答案 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>