一开始以为在pom.xml中引入log4j就可以了,实际上在web.xml中还要配置:
<!-- log4j starts -->
<context-param>
<param-name>webAppRootKey</param-name>
<param-value>userbehaviorstat.root</param-value>
</context-param>
<context-param>
<param-name>log4jConfigLocation</param-name>
<param-value>/WEB-INF/log4j.xml</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>
<!-- log4j ends -->
每一项都是必须的,log4j.xml位置可以通过log4jConfigLocation指定,webAppRootKey不指定,有可能出异常,listener不指定就不会去使用log4j
log4j.xml配置如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
<appender class="com.logtest.AsyncScribeAppender" name="scribe">
<param value="true" name="addStackTraceToMessage"/>
<param value="my-app.ru" name="hostname"/>
<param value="true" name="printExceptionStack"/>
<param value="my-app" name="scribeCategory"/>
<param value="192.168.3.84" name="scribeHost"/>
<param value="1463" name="scribePort"/>
<param value="100" name="sizeOfInMemoryStoreForward"/>
<param value="6000" name="timeToWaitBeforeRetry"/>
<layout class="org.apache.log4j.PatternLayout">
<param value="%d{yy/MM/dd HH:mm:ss} %p %c{2}: %m%n" name="ConversionPattern"/>
</layout>
</appender>
<!-- Application Loggers -->
<logger name="com.yunzu.ubs">
<level value="error" />
</logger>
<!-- 3rdparty Loggers -->
<logger name="org.springframework.core">
<level value="error" />
</logger>
<logger name="org.springframework.beans">
<level value="error" />
</logger>
<logger name="org.springframework.context">
<level value="error" />
</logger>
<logger name="org.springframework.web">
<level value="error" />
</logger>
<root>
<level value="error"/>
<appender-ref ref="scribe"/>
</root>
</log4j:configuration>
我这是写到scribe中的,所以对spring的info都要过滤掉,不写按缺省,所以要写成一个高级别log level的,如果不希望这些日志干扰,可以写成off级别,如果需要全写,写成all级别