天天看點

log4j在spring4中的配置

首先必須有日志配置檔案

log4j.rootLogger = INFO,stdout,D,E

log4j.appender.stdout = org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target = System.out
log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern = [%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n

log4j.appender.D = org.apache.log4j.DailyRollingFileAppender
log4j.appender.D.File = ${spring4.root}WEB-INF/logs/INFO.log
log4j.appender.D.Append = true
log4j.appender.D.Threshold = INFO
log4j.appender.D.layout = org.apache.log4j.PatternLayout
log4j.appender.D.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]  %m%n
           

當然你願意也可以用xml形式的

然後在把log4j配置到spring容器中

先說傳統的web.xml形式的

<context-param>  
    <param-name>log4jConfigLocation</param-name>  
    <param-value>WEB-INF/conf/log4j.properties</param-value>  
</context-param>
           
<context-param>
	<param-name>webAppRootKey</param-name>
	<param-value>cweb.root</param-value>
</context-param>
<context-param>  
    <param-name>log4jRefreshInterval</param-name>  
      <param-value>3000</param-value>  
 </context-param>  
  
<listener>  
    <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>  
 </listener>  
           
log4jConfigLocation 是指明log4j配置檔案位置  
           
webAppRootKey 指定一個項目路徑的系統變量,相同容器中,不同項目不能一樣,這樣在log4j.properties指定日志檔案路徑可以指定到項目路徑下,不再局限于絕對路徑
           
log4jRefreshInterval 是log4j配置檔案自動重新整理時間
           
還有一個log4j的日志監聽器
           
還有一種形式就是我最喜歡的純java配置, 在程式初始化類中重載OnStartup
public class Spring4WebInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
           
@Override
	public void onStartup(ServletContext servletContext) throws ServletException {
		// TODO Auto-generated method stub
		servletContext.addListener(Log4jConfigListener.class);
		servletContext.addListener(WebSessionListener.class);
		servletContext.setInitParameter("webAppRootKey", "spring4.root");
		servletContext.setInitParameter("log4jConfigLocation", "classpath:log4j.properties");
		servletContext.setInitParameter("log4jRefreshInterval", "10000");
		super.onStartup(servletContext);
	}
           
這裡我要着重強調一下,使用webAppRootKey指定應用路徑必須指定log4j.properties的位置,就算是預設位置也必須指定即配置log4jConfigLocation,否則系統變量無法應用到log4j中去; 還有Spring通過WebAppRootListener 這個監聽器來運作時的項目路徑,但是如果在web.xml中已經配置了Log4jConfigListener這個監聽器,則不需要配置WebAppRootListener了。因為Log4jConfigListener已經包含了WebAppRootListener的功能