程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> JAVA綜合教程 >> Log4j 輸出的日志中時間比系統時間少了8小時的解決方法,log4j日志文件重復輸出,log4j日志文件

Log4j 輸出的日志中時間比系統時間少了8小時的解決方法,log4j日志文件重復輸出,log4j日志文件

編輯:JAVA綜合教程

Log4j 輸出的日志中時間比系統時間少了8小時的解決方法,log4j日志文件重復輸出,log4j日志文件


1. 第一個問題:時間少了8小時

Log4j 輸出的日志中,時間比系統時間少了8小時,但是 eclipse 控制台輸出的日志的時間卻是對的。

log4j配置如下:

#all logger output level is 'ERROR' and output position is stdout
#so only write our project's DEBUG log and ERROR log of the others
log4j.rootLogger=ERROR, stdout, R
#log4j.appender is set output postion
#log4j.logger is set some package(some package your want output logger specially)=[output level],[...output position]

#log4j.logger.org.springframework=OFF  
#log4j.logger.org.apache.commons=OFF 
#log4j.logger.org.apache.struts=OFF   
#log4j.logger.org.hibernate=OFF
#log4j.logger.org.logicalcobwebs=OFF

#only write our project's log(DEBUG)
log4j.logger.com.diantu=DEBUG

log4j.logger.org.logicalcobwebs.proxool=DEBUG, proxool

#in the console
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
#config stdout position output contain INFO level and up
log4j.appender.stdout.Threshold=DEBUG
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout 
log4j.appender.stdout.layout.ConversionPattern=[%-5p] %l:%t - %m %n

#in the daily files
log4j.appender.R=org.apache.log4j.DailyRollingFileAppender
log4j.appender.R.Threshold=DEBUG
log4j.appender.R.File=${root.path}/log/EMR.log
log4j.appender.R.DatePattern='.'yyyy-MM-dd'.log'
log4j.appender.R.layout=org.apache.log4j.PatternLayout 
log4j.appender.R.layout.ConversionPattern=%d [%-5p] %l:%t - %m %n

log4j.logger.com.statestr=DEBUG

log4j.appender.proxool=org.apache.log4j.DailyRollingFileAppender
log4j.appender.proxool.Threshold=DEBUG
log4j.appender.proxool.File=${root.path}/log/proxool.log
log4j.appender.proxool.DatePattern='.'yyyy-MM-dd'.log'
log4j.appender.proxool.layout=org.apache.log4j.PatternLayout 
log4j.appender.proxool.layout.ConversionPattern=%d [%-5p] %l:%t - %m %n

有一篇博客講了這個問題:http://peng4602.iteye.com/blog/1844356

但是按照他的方法,沒有作用。

 

原因分析,eclipse 輸出的時間是對的,那麼JVM的時區設置應該是對的。系統的時間是對的,那麼系統時區也應該是沒有問題的。

那麼問題可能是 tomcat 獲取時區失敗,所以使用了默認的時區,所以可北京時間相差了 8 個小時,解決方法,

在 C:\apache-tomcat-8.0.33\bin 下找到 catalina.bat 打開編輯:

在 

set _EXECJAVA=%_RUNJAVA%
set MAINCLASS=org.apache.catalina.startup.Bootstrap
set ACTION=start
set SECURITY_POLICY_FILE=
set DEBUG_OPTS=
set JPDA=

後面加入 :

set -Duser.timezone=GMT+08

保存,重啟tomcat即可解決。

上面博客地址中的解決方法:set JAVA_OPTS=%JAVA_OPTS% -Xms256m -Xmx800m -Duser.timezone=GMT+08

在 tomcat-8.0.33 中沒有起作用。

 

2. 第二個問題:log4j日志文件重復輸出

2016-04-22 01:51:28,427 [DEBUG] org.logicalcobwebs.proxool.HouseKeeper.sweep(HouseKeeper.java:81):HouseKeeper - 000036 (00/05/01) - Testing connection 2: True 
2016-04-22 01:51:28,427 [DEBUG] org.logicalcobwebs.proxool.HouseKeeper.sweep(HouseKeeper.java:81):HouseKeeper - 000036 (00/05/01) - Testing connection 2: True 

問題是 log4j 的配置文件 中兩次 appender 到了一個文件中。

第一次:

log4j.rootLogger=ERROR, stdout, R, proxool

 

其中包括了 proxool

 

第二次:

log4j.logger.org.logicalcobwebs.proxool=DEBUG, proxool

 

所以當然會重復輸出兩次了。

去掉 log4j.rootLogger 中的 proxool 就行了。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved