欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

初探Log4j2-yaml配置坑

程序员文章站 2022-06-10 21:52:54
...

不思进取太久了,想捣鼓点新东西,刚好在log4j这一块有解决不了的问题,想换log4j2试试;以前也没有写过yaml,就想着顺便试试新的配置。

 

笔者使用maven构建Demo, 按官网Configuration with YAML的说明加入依赖

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

 兴致勃勃写了个最简单的main方法,打印info级别的日志,跑起来却一直报:

 

ERROR StatusLogger No log4j2 configuration file found. Using default configuration: logging only errors to the console.

找不到log4j2的配置文件,笔者检查了几遍,配置文件明明已经编译成功,怎么会找不到呢?
网上找了很多相关的文章,都没发现有出现过类似的问题。。。

不能卡在这是吧,太想试试log4j2了, Debug源代码吧,这一Debug,我勒个去啊,jackson-dataformat-yaml这个依赖包还有些依赖没被引入,com.fasterxml.jackson.databind.ObjectMapper 在源文件里就就是红的...

 

导致YamlConfigurationFactory中的构造方法无法正常加载com.fasterxml.jackson.databind.ObjectMapper的Class...

 

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"
};

private final boolean isActive;

public YamlConfigurationFactory() {
    for (final String dependency : dependencies) {
        if (!Loader.isClassAvailable(dependency)) {
            LOGGER.debug("Missing dependencies for Yaml support");
            isActive = false;
            return;
        }
    }
    isActive = true;
}

 

 isActive的结果为false, YamlConfigurationFactory的getConfiguration()获取配置永远为null

@Override
public Configuration getConfiguration(final LoggerContext loggerContext, final ConfigurationSource source) {
    if (!isActive) {
        return null;
    }
    return new YamlConfiguration(loggerContext, source);
}

 

 

解决方法:

加入jackson-databind依赖包

<dependency>
       <groupId>com.fasterxml.jackson.core</groupId>
       <artifactId>jackson-databind</artifactId>
       <version>2.8.6</version>
</dependency>

 

 

相关标签: Log4j2 yaml