Log4j2+Spring5+SpringMVC+Mybatis 在maven项目中,log4j2 无法输出框架自身日志的解决方式

以 ssm 模式搭建的项目,使用Log4j时,日志输出一切正常。

当升级使用spring5以上版本后,发现老版本的Log4j,已经不支持了,只能升级为Log4j2 版本。

Log4j2 的相关配置,参见:https://blog.csdn.net/yangshangwei/article/details/75146896

当把log4j2配置文件,都配置完后。

程序运行,发现,除了能正常输出  自己写的 log 信息外, spring 和mybatis 的框架信息,是怎么都无法输出,而且

当程序运行有bug的时候,控制台也无法显示 相应的 错误信息,只能通过 Chrome 浏览器来查看 错误信息,非常不方便。

(tomcat 安装目录下的 log目录的 日志,也没有输出任何 框架的日志信息。)

折腾了好几天,才找到原因。log4j-jcl、

原来除了需要在 pom.xml   添加:log4j-api、log4j-core、log4j-web 依赖外,还需要两个 依赖。

log4j-jcl ,log4j-slf4j-impl  jar包。

还有,使用 Log4j2 应用于Java EE web应用程序时,需要将servlet 版本在3.0及以上。

官方说明如下:


 

配置依赖如下:

<!-- 使用 log4j2,需要 servlet 3.0以上版本-->
 <!--javax.servlet (begin)******************************************************************-->
        <!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>4.0.1</version>
            <scope>provided</scope>
        </dependency>
        <!--javax.servlet (end)-->

        <!-- apache (begin)******************************************************************-->
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-api</artifactId>
            <version>${log4j2.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-core</artifactId>
            <version>${log4j2.version}</version>
        </dependency>

        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-web</artifactId>
            <version>${log4j2.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-jcl</artifactId>
            <version>${log4j2.version}</version>
        </dependency>

        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId> log4j-slf4j-impl </artifactId>
            <version> 2.10.0 </version>
        </dependency>
        <!--    apache (end)-->

 

那为什么,需要加入 log4j-slf4j-impl、和   log4j-jcl 呢?  我们先来了解一下,他们 是干嘛的?

官网说明:

当有使用 commons-logging 1.x 时,就需要。


也就是说,log4j-slf4j-impl 是桥接器,将 slf4j 与 log4j2 桥接起来。 但是在我们的项目中,依赖的是 log4j2 的日志实现,并没有依赖slf4j.

那唯一的可能,就是 spring5 的日志体系现实,是依赖 slf4j, 为了验证我的想法,我对spring 的 监听器,加了断点,进行Bug运行!
-----------------------------------------------


 

进sl4j 包 去看看....


可以看到,spring5 的底层日志体系是 依赖SLF4J。

而我们的项目用的是 Log4j2 ,所以 需要用 log4j-slf4j-impl jar包 桥接包,连接起来。

同样,当你的项目组件的某部分,依赖 commons-logging1.2版本, 如果要想把内容输出到 Log4j2, 也得需要  log4j-jcl。

好累,花了我好长时间!!!

---------------------------------------------------------

发布了111 篇原创文章 · 获赞 28 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/weixin_42697074/article/details/88084565
今日推荐