那些年趟过的坑—log4j和slf4j-api冲突

之前接触过一个springmvc框架,使用的是log4j配置日志;但是Apache Active MQ依赖的是另一个日志类库,在引入slf4j-api后项目中sql不打印了,但是在一个项目中排查问题要知道参数和sql这个是最快的便捷方法,查过好多资料很乱,经过多次配置尝试解决了这个冲突;

1.我们先来了解一下slf4j

slf4j不同于其他日志类库,与其他日志类库有很大区别,slf4j(Simple logging Facade for Java)不是一个真正的日志实现而是一个抽象层(abstraction layer),它允许你在后台使用任意一个日志类库。

如果一个项目总已经使用log4J,而你加载了一个类库,如:Apache Active MQ 依赖的是另一个日志类库logback,那么需要加载,但是Apache Active MQ使用的是slf4j,可以继续使用原来定的日志类库无需维护新的日志框架;

总体来说,slf4j使代码独立于任意一个特定的日志api,虽然抽象日志类库在程序员思想中已经不是新鲜,而且Apache commons logging 都已经使用这种思想,现在slf4j在项目中是最为频繁出现,成为一种日志标志;

2.slf4j对比log4j logback java.util.Logging

slf4j日志主要是使得程序独立于任何特定的日志类库,依赖于特定类库可能需要不同配置,并且导致维护麻烦;slf4j api具有占位符(pace holder),在代码中表示{};占位符是一个类似String,format()的%s;会在运行时被某个提供的实际字符所替换,降低代码总字符串连接次数可节省新建String对象;


接下来为我们言归正传解决我的问题,

1.导入依赖jar包

slf4j-api-1.6.6.jar slf4j-log4j12-1.7.5.jar slf4j-simple-1.7.7.jar

然后在web.xml添加如下:

<!-- log4j配置,文件路径,因为是跟随项目启动 -->
<context-param>
	<param-name>log4jConfigLocation</param-name>
	<param-value>classpath:log4j.xml</param-value>
</context-param>

<!-- 加载log4j配置文件 -->
<listener>
	<listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
</listener>
就是这么简单,有问题可以留言沟通哦!


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章