2014-02-10 28 views
2

當調試代碼時,我傾向於使用System.out & System.err相當多。問題是當異常發生時,我使用System.out的同時結果看起來不是很有條理。同步System.out&System.err

[CLIENT]:postinit: vic.rpg.gui.GuiMain.init() 
java.net.ConnectException: Connection refused: connect 
[CLIENT]:Destroying Network Thread... 
[CLIENT]:done! 
    at java.net.DualStackPlainSocketImpl.connect0(Native Method) 
    at java.net.DualStackPlainSocketImpl.socketConnect(Unknown Source) 
    at java.net.AbstractPlainSocketImpl.doConnect(Unknown Source) 
    at java.net.AbstractPlainSocketImpl.connectToAddress(Unknown Source) 
    at java.net.AbstractPlainSocketImpl.connect(Unknown Source) 
    at java.net.PlainSocketImpl.connect(Unknown Source) 
... 
[CLIENT]:Starting Server... 

這不是很嚴重,但它有時會使閱讀日誌有點困難。

+0

衝廁問題。 – devnull

+3

如果您使用了正確的日誌記錄框架,那麼您就不會遇到這樣的問題。 – assylias

回答

1

您可以通過在每次寫入任何流時調用flush來避免此問題。例如:

System.out.println ("Writing to *out*"); 
System.out.flush(); 

如果你從不同的線程登錄,那麼你的日誌消息會自然交錯。如果你想幹淨地分離輸出的線程,我建議使用日誌庫,如log4j

+0

我已經將System.out包裝到我自己的PrintStream中,爲每個方法都添加了'super.flush()'。 – Vic