log4j configuration in spring application

很久没使用log4j,一直都使用的是logback,记得之前使用log4j的时候,需要自己写个log4jInit的辅助类来帮助初始化log4j的配置文件,现在发现spring已经提供了各种支持,所以在此记录下。以前的老土方式可以放弃了(貌似spring很早就提供了,自己土了)

做个广告,logback是不需要这个辅助类的,因为他是依据文件名自己搜索初始化的,而且还有个默认的初始化。(非常喜欢logback)

说下spring里配置log4j的方式吧:

第一种方式:类似自己写个log4J的初始化辅助类,指定classpath中的文件即可,不管是xml还是properties都可以,因为他内部有做判断的。

<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>classpath:log4j.xml</value>
			</list>
		</property>
</bean>
 

第二种方式:其实主要原理是servlet中listener的使用

<context-param>
         <param-name>log4jConfigLocation</param-name>
         <param-value>/WEB-INF/log4j.properties</param-value>
  </context-param>
  <context-param>
         <param-name>log4jRefreshInterval</param-name>
         <param-value>1000</param-value>
  </context-param>
  <listener>
<listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
</listener>

看下他这里有个 log4jRefreshInterval参数,内部调用的是PropertyWatchdog ,这个起的作用就是动态来观察配置文件是否修改,修改了以后重新初始化配置,jboss里的log也是依据这个来动态修改level起作用的。如果你可以修改这个文件,那使用这个方式最好了。因为第一个方式一般会在jar包了。当然第一个方式也可以修改为动态观察日志的方式了,因为spring内部重载了那个方法,只是多加了个参数而已。

参考:http://firstpartners.net/kb/index.php/Spring_Pointer_to_Log4j_Configuration_File

         http://helpdesk.objects.com.au/java/how-to-specify-log4j-configuration-in-spring-application

相关推荐