2015-11-02 23 views
1

我嘗試配置logback,將其他日誌事件記錄到System.out時將錯誤記錄到System.err。 到目前爲止,我所提出的最好的方法是用過濾器定義兩個appender。這解決了主要問題,但引入了一個我想避免的新問題: 有兩個appender有時會發生日誌事件被記錄的順序混淆。
例如:
在代碼中:信息日誌後跟錯誤日誌。
在控制檯上:錯誤在info事件之前被記錄到控制檯。logback:登錄到System.out時的爭用條件&err

我感興趣的任何和所有的想法如何避免這個問題,同時還記錄錯誤System.err的,其餘到System.out。

回答

0

恐怕在這種情況下你通常不能強制執行「正確」的順序。這些消息被寫入兩個不同的流,它們獨立地被刷新到輸出介質,並且它依賴於許多事情,這些事情不能控制代碼或logback,兩個流的內容在輸出上的混合程度如何。剛剛嘗試一個簡單的例子:

while(true) { 
     System.out.println("XXX"); 
     System.err.println("YYYYYY"); 
    } 

雖然我的代碼是同步的,XXX和YYYYY串讓我的控制檯上的隨機混合(「XXX」或「YYYYYY」線羣隨機打印)。並且logback在底層做了類似的事情,並且無法強制控制檯如何打印出兩個單獨的流。

+0

謝謝你的例子。我沒有想到結果是那麼極端。但是由於直到使用logback之前我沒有注意到這種效果(我之前通過打印出來和之前的錯誤記錄),所以我懷疑logback引起的問題增強了這個問題。我想知道是否有可能降低發生這種情況的機率? –