使用Spring Log4jConfigListener实现Log4j中以相对路径指定log文件

    Log4j在指定log文件位置时一般是使用绝对路径,这样在部署环境发生变化时显得十分麻烦。

    由于spring也会加载log4j.properties,如果加载不到就往控制台打log信息。Spring提供了 一个Log4jConfigListener,本身就能通过web.xml中配置来指定位置加载log4j配置文件和log输出路径,但是该 listener需要放在spring的Listener之前。 

    而实际上,Log4jConfigListener更适合log4j在web工程中使用,原因如下: 
1. 动态的改变记录级别和策略,不需要重启Web应用,如《Effective Enterprise Java》所说。 
2. 把log文件定在 /WEB-INF/logs/ 而不需要写绝对路径。 
   因为 系统把web目录的路径压入一个叫webapp.root的系统变量。这样写log文件路径时不用写绝对路径了. 
   log4j.appender.logfile.File=${webapp.root}/WEB-INF/logs/settlement.log 
3. 可以把log4j.properties和其他properties一起放在/WEB-INF/ ,而不是Class-Path。 
4. log4jRefreshInterval为60000表示 开一条watchdog线程每60秒扫描一下配置文件的变化; 

<span style="font-family:Courier New;font-size:12px;"><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>60000</param-value>    
</context-param> 
        <listener>    
        <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>    
</listener></span>

log4j配置文件如下:

log4j.appender.R=org.apache.log4j.DailyRollingFileAppender
log4j.appender.R.File=${webapp.root}/WEB-INF/logs/settlement.log
log4j.appender.R.DatePattern = "."yyyy-MM
log4j.appender.R.layout=org.apache.log4j.PatternLayout
log4j.appender.R.layout.ConversionPattern=%d %p [%c] - %m%n</span></span>


郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。