Log4j配置webAppRootKey

引用
为了让Web项目中的Spring 使用Log4j做如下配置:

1、在web.xml中添加如下内容:

<!--如果不定义webAppRootKey参数,那么webAppRootKey就是缺省的"webapp.root"。但最好设置,以免项目之间的名称冲突。

定义以后,在WebContainer启动时将把ROOT的绝对路径写到系统变量里。

然后log4j的配置文件里就可以用${webName.root}来表示Web目录的绝对路径,把log文件存放于webapp中。

此参数用于后面的“Log4jConfigListener”-->

<context-param>

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

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

</context-param>

<!--由Sprng载入的Log4j配置文件位置-->

<context-param>

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

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

</context-param>

<!--Spring默认刷新Log4j配置文件的间隔,单位为millisecond-->

<context-param>

<param-name>log4jRefreshInterval</param-name>

<param-value>60000</param-value>

</context-param>

<!--Web项目Spring加载Log4j的监听-->

<listener>

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

</listener>

2、编写log4j.properties属性文件,使用web.xml配置的全局变量:

log4j.appender.A_default.File=${webName.root}/WEB-INF/logs/log4j.log

详细内容略。

--------------------------------------------------------------------------------------------------------------------------------------------

log4j是很好用的一个工具,在目前的WEB项目中经常使用。配上jakarta的commonlogging和Eclipse的插件Log4E很好用。

不过还是有几个不太方便的地方:

1Log4j的配置文件修改了之后必须重启才能生效

2配置文件只能放在WEB-INF/classes

Spring对于Log4j有了更好的增强,配置文件修改后不需要重启,不用再放到WEB-INF/classes目录下。

下面是要在web.xml中增加的配置参数。

<!--如果不定义webAppRootKey参数,那么webAppRootKey就是缺省的"webapp.root"-->

<context-param>

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

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

</context-param>

<!--由Sprng载入的Log4j配置文件位置-->

<context-param>

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

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

</context-param>

<!--Spring默认刷新Log4j配置文件的间隔,单位为毫秒-->

<context-param>

<param-name>log4jRefreshInterval</param-name>

<param-value>60000</param-value>

</context-param>

<!--Springlog4jConfigloader-->

<listener>

<listener-class>

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

</listener>

第一个参数webAppRootKey如果只有一个应用用了Spring对Log4J的增强,则可以不用设置;否则一定要进行设置。

这个以前也不知道,也是今天在同时发布两个应用的时候出了问题后Google发现的。

相对应的log4j的配置文件(用的xml格式):

<?xmlversion="1.0"encoding="UTF-8"?>

<!DOCTYPElog4j:configurationSYSTEM"log4j.dtd">

<log4j:configurationxmlns:log4j="http://jakarta.apache.org/log4j/">

<appendername="CONSOLE"class="org.apache.log4j.ConsoleAppender">

<layoutclass="org.apache.log4j.PatternLayout">

<paramname="ConversionPattern"

value="%p---%C{1}.%M(%L)|%m%n"/>

</layout>

</appender>

<appendername="LOG_FILE"class="org.apache.log4j.RollingFileAppender">

<paramname="Threshold"value="ALL"/>

<paramname="File"

value="${WebConsole2.root}/WEB-INF/logs/WebConsole2.log"/>

<paramname="Append"value="true"/>

<paramname="MaxFileSize"value="500KB"/>

<paramname="MaxBackupIndex"value="1"/>

<layoutclass="org.apache.log4j.PatternLayout">

<paramname="ConversionPattern"value="%d%-5p[%c]%m%n"/>

</layout>

</appender>

<loggername="org.apache.struts">

<levelvalue="warn"/>

</logger>

<loggername="org.springframework">

<levelvalue="warn"/>

</logger>

<loggername="com.rb.webconsole">

<levelvalue="all"/>

</logger>

<root>

<levelvalue="off"/>

<appender-refref="CONSOLE"/>

<appender-refref="LOG_FILE"/>

</root>

</log4j:configuration>

注意现在log文件的位置在/WEB-INF/logs目录下了。

相关推荐