2013-08-30 29 views
0

我有一個測試程序(我沒有寫),這是一個非常奇怪的錯誤,這隻發生在一些時間。在程序包含測試報告一個字符串的末尾是輸出利用Java log4j並不總是記錄最後一行

logger.warn(reportString); 

Anywhere的1/10至1/3的嘗試(其變化)沒有顯示該字符串,但一切之前,它是。 在此之前,我添加了這一行以確保字符串始終正確創建,這是因爲每次都會給出相同的長度。

logger.info("Length: " + reportString.length()); 

要試驗我加入後,另一日誌行,所以在節目的最後,現在看起來是這樣的:

logger.info("Length: " + reportString.length()); 
logger.warn(reportString); 
logger.info("REACHED END OF PROGRAM"); 

當這樣的reportString似乎總是要打印/記錄,但「已達到程序結束「字符串僅在約50%的時間內打印/記錄。也許這是我的Windows命令提示符?我知道這是一個非常模糊的問題,但如果任何人有任何想法,他們將不勝感激。

+0

聽起來像它可能是一個線程問題。線程問題,你不在某處調用join。 –

+0

線程在程序中使用,所以我會檢查出來。謝謝。 – KingJustinian

回答

0

也許你需要刷新所有緩衝的日誌以發送所有的輸出。補充下:

logger.warn(reportString); 
LogManager.shutdown(); 

萬一你有它在你的代碼,你可以嘗試刪除了一句:

System.exit(0); 
+0

這解決了這個問題。我注意到程序使用了一些特殊的log4j設置,比如AsyncAppender。所以它可能與線索有關,如上面的評論所說。 – KingJustinian

0

這可能與log4j如何緩衝它輸出的數據有關,請嘗試在記錄器打印的最後一個字符串中明確添加\ n,並查看它現在是否一致打印。