設計階段主要考慮幾個問題
web.xml對應位置加入如下內容
<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>10000</param-value> </context-param> <listener> <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class> </listener>
【注意】
1. 不要把log4jConfigLocation 指定為/WEB-INF/classes/log4j.properties
當log4jConfigLocation指定為/WEB-INF/classes/log4j.properties,如果需要動態調整日志配置,可能會引起類的重新加載。但動態調整/WEB-INF/log4j.properties不會引起類的重新加載
2. log4jRefreshInterval的單位是毫秒
3. /WEB-INF/log4j.properties和/WEB-INF/classes/log4j.properties不能同時存在,否則會報異常
4. JUnit單元測試類的問題
運行單元測試時,報以下錯誤
log4j:WARN No appenders could be found for logger (org.springframework.context.support.ClassPathXmlapplicationContext).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
原因是找不到默認的log4j配置文件,可以手動指定,如:
Log4jConfigurer.initLogging("classpath:log4j.test.properties");
log4j.test.properties是專門為執行單元測試類使用的一個配置文件
為每個工程指定一個獨立的日志文件/WEB-INF/log4j.properties配置如下
log4j.rootLogger=info, filelog4j.appender.file=org.apache.log4j.DailyRollingFileAppenderlog4j.appender.file.File=${catalina.home}/logs/projectNamelog4j.appender.file.DatePattern='.'yyyy-MM-dd'.log'log4j.appender.file.Encoding=UTF-8log4j.appender.file.layout=org.apache.log4j.PatternLayoutlog4j.appender.file.layout.ConversionPattern=%p %d %m [%l] %n
log4j.appender.file.File=${catalina.home}/logs/projectName
中的projectName可以是工程名等唯一標識一個工程的字符串
${catalina.home}表示當前tomcat工程根目錄,Tomcat啟動時設置該變量
通過以上配置,就可以達到為每個工程指定一個獨立的日志文件的目錄
小結
現在來解答如下幾個問題
【問】一個Tomcat加載多個工程,如何確定日志中的內容是哪個工程的?
【答】為每個工程指定獨立的日志文件,避免多個工程日志文件輸出到一個文件的問題
【問】多個Tomcat同時加載同一個工程,可以使用log4j的DailyRollingFileAppender等文件類Appender嗎?
【答】可以,指定文件名時,可以使用類似
log4j.appender.file.File=${catalina.home}/logs/projectName
的配置,這樣每個Tomcat的日志分別保存
【問】多個Tomcat同時加載同一個工程,可以分別指定日志輸出目錄嗎?
【答】可以 同上一個問題的答案
【問】可以動態調整一個類的日志級別嗎?
【答】可以 本文已經提供了一種思路
新聞熱點
疑難解答