以 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。
好累,花了我好长时间!!!
---------------------------------------------------------