项目中Log组件不统一解决方案

这里以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>

猜你喜欢

转载自kingxss.iteye.com/blog/1845608