这里以Log4j 和 slf4j为例子。
1. 项目使用Log4j 1的情况
项目研发过程中,慢慢会加入各种组件,比如ActiveMQ、jbpm、quartz等,同时发现启动项目时控制台打印了很多这些组件的日志,而用项目中原本使用的lof4j 1.x配置文件并不能控制这些日志的打印,分析发现引入的这些技术使用的是slf4j控制日志,于是需要将slf4j和log4j的整合。解决方案是保留原本的log4j的jar包,删除slf4j-1.x.jar,然后导入slf4j-api-1.x.jar和slf4j-log4j12-1.x.jar两个jar包,这样就可以用log4j的配置来控制slf4j的打印了。maven依赖如下:
<!-- log4j start --> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.17</version> </dependency> <!-- log4j end --> <!-- slf4j bound to Log4j start --> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.7.2</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>1.7.2</version> </dependency> <!-- slf4j bound to Log4j end -->
具体可以查看slf4j官网:http://www.slf4j.org/manual.html
2. 项目使用Log4j 2的情况
log4j现在有2.x版本了,这时整合slf4j1.x需要保留log4j-2.x.jar,增加log4j-slf4j-impl-2.x.jar,maven依赖情况如下:
<dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-api</artifactId> <version>2.0-beta4</version> </dependency> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-core</artifactId> <version>2.0-beta4</version> </dependency> <dependency> <groupId>org.apache.logging.log4j.adapters</groupId> <artifactId>log4j-slf4j-impl</artifactId> <version>2.0-beta4</version> </dependency>
具体参考log4j官网:http://logging.apache.org/log4j/2.x/build.html
3. 在web容器中使用Spring加载外部log4j配置文件
在ApplicationContext.xml中配置如下:
<!-- log4j配置 --> <bean id="log4jInitialization" class="org.springframework.beans.factory.config.MethodInvokingFactoryBean"> <property name="targetClass" value="org.springframework.util.Log4jConfigurer" /> <property name="targetMethod" value="initLogging" /> <property name="arguments"> <list> <value>file:/opt/rms/config/log4j.xml</value> </list> </property> </bean>