现在的位置: 首页 > 综合 > 正文

Spring与Log4j结合实现自定义日志输出目录

2013年10月12日 ⁄ 综合 ⁄ 共 1225字 ⁄ 字号 评论关闭

为了实现日志输出目录的动态配置,今天看了一下Spring中的相关代码,发现使用一个
Servlet
Listener,在Tomcat启动时把ROOT的绝对路径写到系统变量里,这样log4j的配置文件里就可以用${myApp.root}来表示刚刚
设进去的系统变量,具体如下: 
(1) 在web.xml中加入如下配置:

<!--
 将当前的应用root设置到系统变量中 
-->




<
context-param
>




    <
param-name
>
webAppRootKey
</
param-name
>




   
<

param-value
>
myApp.root
</
param-value
>



</
context-param
>



<
context-param
>



   


<
param-name
>
log4jConfigLocation
</
param-name
>



   


<
param-value
>
WEB-INF/log4j.xml
</
param-value
>



</
context-param
>


...


<
listener
>



   


<
listener-class
>
        
org.springframework.web.util.Log4jConfigListener
</
listener-class
>



</
listener
>


说明:
   Log4jConfigListener中的initLogging方
法会将系统的ROOT的绝对路径设置到系统变量中,默认是设置到webapp.root,但是如果多个系统都用这个默认的变量就会覆盖了,因此在这里定义
了myApp.root,防止与其他系统冲突。

(2) 在log4j.xml中如下配置:

<
appender 
name
="PROJECT"
 class
="org.apache.log4j.FileAppender"
>




    <
param 
name
="file"
 value
="${myApp.root}/logs/mylog.log"
/>




   
<

param 
name
="append"
 value
="false"
/>



    <
param 
name
="encoding"
 value
="utf-8"
/>



    <
layout 
class
="org.apache.log4j.PatternLayout"
>



        <
param 
name
="ConversionPattern"
 value
="%d [%t] %p - %m%n"
/>



    </
layout
>

</
appender
>


这样就可以实现日志输出目录的动态配置了!

(3)
注意:要将log4j.xml放在WEB-INF目录下面,如果放在通常的classes下面的话会有一个问题,当Tomcat启动的时候,Log4j会
到classes下面去找这个配置 文件,然后因为这时候还米有设置系统变量,那么就会报找不到对应文件的错误了!但其实这个错误是不会影响接下来的功
能,就是为了避免出现这个异常将配置文件放到WEB-INF下面。

抱歉!评论已关闭.