zoukankan      html  css  js  c++  java
  • spring5.x日志问题log4j

    Spring5集成Log4j2日志_zjh2016的博客-CSDN博客

    Spring已经升级到5.X版本,最近在用Spring5.X集成Log4j2+Slf4j日志时,遇到了版本升级问题的困扰。按照Spring4.X的方式添加jar包,从网上查到的Maven依赖如下,

    <dependency>
    <groupId>log4j</groupId>
    <artifactId>log4j</artifactId>
    <version>1.2.17</version>
    </dependency>
    <dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-api</artifactId>
    <version>1.7.21</version>
    </dependency>
    <dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-log4j12</artifactId>
    <version>1.7.21</version>
    </dependency>


    添加完之后,编写log4j2.xml,然后使用以下代码进行测试:

    package test;

    import org.slf4j.LoggerFactory;
    import java.util.logging.Logger;

    /***
    *@ClassName LogTest
    *@Description TODO: Slf4j与Log4j2配合使用,打印日志信息
    *@Author zjh
    *@Data 2019/11/20 16:15
    *@Version 1.0.0
    ***/
    public class LogTest {
    private static final Logger log = LoggerFactory.getLogger(LogTest.class);
    public static void main(String[] args) {
    log.info("hello world");
    log.warning("hello world");
    }
    }


    其中,导入的两个包是编辑器(IDEA)自动导入的。

    运行后报如下错误:
    java.lang.ExceptionInInitializerError Caused by: java.lang.ClassCastException: org.slf4j.impl.Log4jLoggerAdapter cannot be cast to java.util.logging.Logger at test.LogTest.<clinit>(LogTest.java:16)

    错误出现在private static final Logger log = LoggerFactory.getLogger(LogTest.class);这一行。原因是“=”右边的类型是org.slf4j.Logger,而左边的类型是java.util.logging.Logger,两边的类型对不上,于是发生了错误。

    -----------------------------------------------------------------分割线------------------------------------------------------------------

    查了资料发现,Spring5版本废弃了很多之前4.0版本的配置类,所以要更新Maven依赖项,导入正确的日志包,才能进行愉快地玩耍。详细的配置和步骤记录如下:

    1. 添加Mavn依赖项
    需要以下4个依赖项

    <dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-api</artifactId>
    <version>1.8.0-alpha2</version>
    </dependency>
    <dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-slf4j-impl</artifactId>
    <version>2.10.0</version>
    </dependency>
    <dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-api</artifactId>
    <version>2.10.0</version>
    </dependency>
    <dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-core</artifactId>
    <version>2.10.0</version>
    </dependency>


    我使用的Spring版本是5.0.8,如下

    <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context</artifactId>
    <version>5.0.8.RELEASE</version>
    </dependency>

    2. 配置log4j2.xml文件
    在src的resources目录下新建log4j2.xml,内容如下:

    <?xml version="1.0" encoding="UTF-8"?>
    <!--日志级别以及优先级排序: OFF > FATAL > ERROR > WARN > INFO > DEBUG > TRACE > ALL -->
    <!--Configuration后面的status用于设置log4j2自身内部的信息输出,可以不设置,当设置成trace时,可以看到log4j2内部各种详细输出-->
    <configuration status="WARN">
    <!--先定义所有的appender-->
    <appenders>
    <!--输出日志信息到控制台-->
    <console name="Console" target="SYSTEM_OUT">
    <!--控制日志输出的格式-->
    <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
    </console>
    </appenders>
    <!--然后定义logger,只有定义了logger并引入的appender,appender才会生效-->
    <!--root:用于指定项目的根日志,如果没有单独指定Logger,则会使用root作为默认的日志输出-->
    <loggers>
    <root level="info">
    <appender-ref ref="Console"/>
    </root>
    </loggers>
    </configuration>

    3. 编写测试文件
    需要注意的是,导入正确的日志包。

    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;

    完整的测试代码如下:

    package test;

    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;

    /***
    *@ClassName LogTest
    *@Description TODO: Slf4j与Log4j2配合使用,打印日志信息
    *@Author zjh
    *@Data 2019/11/20 16:45
    *@Version 1.0.1
    ***/
    public class LogTest {
    private static final Logger log = LoggerFactory.getLogger(LogTest.class);
    public static void main(String[] args) {
    log.info("hello world");
    log.warn("hello world");
    }
    }


    运行,控制台输出

    2019-11-20 16:47:15.743 [main] INFO test.LogTest - hello world
    2019-11-20 16:47:15.754 [main] WARN test.LogTest - hello world
    1
    2
    成功!
    ————————————————
    版权声明:本文为CSDN博主「muqingfengyin」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/zjh2016/article/details/103170578

  • 相关阅读:
    在operator =中要处理“自我赋值”
    delete指针以后应赋值为NULL
    【转】C++对成员访问运算符->的重载
    【转】浅析SkipList跳跃表原理及代码实现
    【KakaJSON手册】05_JSON转Model_05_动态模型
    【KakaJSON手册】04_JSON转Model_04_值过滤
    【KakaJSON手册】03_JSON转Model_03_key处理
    【KakaJSON手册】02_JSON转Model_02_数据类型
    【KakaJSON手册】01_JSON转Model_01_基本用法
    利用eclipse调试JDK源码
  • 原文地址:https://www.cnblogs.com/Zeng02/p/14960225.html
Copyright © 2011-2022 走看看