zoukankan      html  css  js  c++  java
  • springboot整合log4j2遇到的一个坑

    背景

    项目中使用springboot,需要用log4j2做日志框架

    问题

    项目启动报错:Could not initialize Log4J2 logging from classpath:log4j2-dev.yml

    是一个无法初始化Log4J2配置的问题,项目中采用的yml的配置文件。

    前置操作

    首先引入依赖:

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-log4j2</artifactId>
        </dependency>
    

    去掉默认的logback配置:

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
            <exclusions><!-- 去掉默认配置 -->
                <exclusion>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-logging</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
    

    添加配置文件:

    配置logging.config

    以上是整合操作的必要配置,配置完成启动报错。

    问题排查

    根据异常信息描述,找到源码中初始化的代码:Log4J2LoggingSystem.loadConfiguration

    继续跟进:

    发现是一个抽象方法,idea中使用ctrl+alt+B查找实现类:

    因为使用的是yml,所以实现类应该是YamlConfig这个,找到具体实现:

    通过debug发现isActive是false,所以返回null。在此类中找到isActive的含义:

    这是关键的逻辑,原来回去检查是否存在上面几个依赖的类,调试返现没有YAMLFactory这个类,可以看出这个类是jackson包中的,看来是少依赖了包。

    解决

    引入jackson-dataformat-yaml依赖:

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

    启动正常,问题解决。

  • 相关阅读:
    HDU 4472 Count DP题
    HDU 1878 欧拉回路 图论
    CSUST 1503 ZZ买衣服
    HDU 2085 核反应堆
    HDU 1029 Ignatius and the Princess IV
    UVa 11462 Age Sort
    UVa 11384
    UVa 11210
    LA 3401
    解决学一会儿累了的问题
  • 原文地址:https://www.cnblogs.com/f-anything/p/9228338.html
Copyright © 2011-2022 走看看