2013-05-03 85 views
1

我創建了一個名爲Project1的java項目。對於這個項目我創建了一個log4j.properties文件。爲了在日誌文件中寫入日誌語句,我使用了DailyRollingFileAppenders。我正在使用log4j-1.2.16.jar。日誌文件是:log4j:寫文件中的日誌語句時出錯

log4j.logger.com.gridsense.server.automode=DEBUG, stdout,Rollfile 
log4j.rootLogger=off 
log4j.logger.com.gridsense.server.automode=debug,Rollfile,stdout 

log4j.appender.Rollfile=org.apache.log4j.DailyRollingFileAppender 
log4j.appender.Rollfile.ImmediateFlush=false 
log4j.appender.Rollfile.Append=true 
log4j.appender.Rollfile.Threshold=DEBUG 
log4j.appender.Rollfile.bufferedIO = true 
log4j.appender.Rollfile.File=D:/logs/AutoGS.log 
log4j.appender.Rollfile.layout=org.apache.log4j.PatternLayout 
log4j.appender.Rollfile.layout.ConversionPattern=[%t] %-5p %c %d{dd/MM/yyyy HH:mm:ss}  %m%n 

log4j.appender.stdout=org.apache.log4j.ConsoleAppender 
log4j.appender.stdout.Threshold=DEBUG 
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout 
log4j.appender.stdout.layout.ConversionPattern=%-4r [%t] %-5p %c %x %m%n 

當我運行該項目中,我得到以下錯誤

log4j:ERROR Could not close [email protected] 
java.io.IOException: The handle is invalid 
at java.io.FileOutputStream.writeBytes(Native Method) 
at java.io.FileOutputStream.write(FileOutputStream.java:282) 
at sun.nio.cs.StreamEncoder.writeBytes(StreamEncoder.java:202) 
at sun.nio.cs.StreamEncoder.implWrite(StreamEncoder.java:263) 
at sun.nio.cs.StreamEncoder.write(StreamEncoder.java:106) 
at java.io.OutputStreamWriter.write(OutputStreamWriter.java:190) 
at java.io.BufferedWriter.flushBuffer(BufferedWriter.java:111) 
at java.io.BufferedWriter.close(BufferedWriter.java:246) 
at java.io.FilterWriter.close(FilterWriter.java:87) 
at org.apache.log4j.FileAppender.closeFile(FileAppender.java:185) 
at org.apache.log4j.FileAppender.reset(FileAppender.java:343) 
at org.apache.log4j.WriterAppender.close(WriterAppender.java:207) 
at org.apache.log4j.AppenderSkeleton.finalize(AppenderSkeleton.java:144) 
at java.lang.ref.Finalizer.invokeFinalizeMethod(Native Method) 
at java.lang.ref.Finalizer.runFinalizer(Finalizer.java:83) 
at java.lang.ref.Finalizer.access$100(Finalizer.java:14) 
at java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:160) 
    log4j:ERROR Failed to write [[DefaultQuartzScheduler_Worker-2] DEBUG com.gridsense.server.automode.backgroundWorker.TimerTaskToBeFired 03/05/2013 17:34:45 ? TimerTaskToBeFired.execute - firing timer job with Key [DropBoxFileFetchingSchedulerGroup.JobDetail-ID-1]]. 

我不明白是什麼問題。

回答

0

我對stacktrace的讀法是:泄露了一個FileAppender對象,並且該appender的finalize方法正在嘗試清除它。但它看起來像是失敗了,因爲有問題的資源已經關閉了。

這是很容易的部分。困難的部分是確定泄漏的來源。我的猜測是,它是由這一行造成的:

log4j.logger.com.gridsense.server.automode=debug,Rollfile,stdout 
這似乎是配置第二個記錄器樹複製一個配置一對夫婦較早線

+0

我修改了我的代碼並刪除了第二條語句log4j.logger.com.gridsense.server.automode = debug,Rollfile,stdout仍然出現同樣的錯誤。 – prachi 2013-05-06 09:48:00