2014-09-24 113 views
4

我想設置我的測試日誌記錄,以便日誌輸出主要被抑制 - 除非測試失敗。那麼我想要有調試輸出。Log4j appender用於調試輸出,如果測試失敗

我知道只是在測試類路徑中修改log4j.properties的手動解決方案,或者只是爲了測試而始終激活調試日誌記錄 - 但我不想將綠色測試的粗略輸出垃圾郵件控制檯。

對於失敗的測試,我希望自動構建給我調試輸出,以防止出現一些有問題的環境問題。

我一直在想,應該有一個appender,可以結合junit規則,抑制輸出,直到測試的結果已知,然後只有在測試失敗時纔將日誌記錄到另一個appender。

我可以自己做這個,但我想知道有沒有人嘗試過,或者如果有更好的解決方案。

回答

0

您可以添加一個觀察者,該觀察者記錄到一個單獨的記錄器。

public class MyUnitTest { 

    private static Logger errorLog = Logger.getLogger("ErrorLogger"); 

    @Rule 
    public TestWatcher testWatcher = new TestWatcher() { 
    @Override 
    protected void failed(Throwable e, Description description) { 
     errorLog.debug(description.toString(), e); 
     super.failed(e, description); 
    } 
    }; 

} 

然後只需添加ErrorLogger到您的log4j屬性

log4j.logger.ErrorLogger=debug, someAppender 
+0

這不會給我執行的代碼的調試輸出... – Flyhard 2014-09-24 12:38:10

+0

既然你不能在登錄後打開」我已經記錄了你將不得不用自定義記錄器替換你的記錄器,或者覆蓋日誌記錄,以便它寫入一個「自定義容器」,可以根據請求轉儲它的內容。 – TedTrippin 2014-09-24 13:15:00

+0

我正在考慮讓自己的appender轉向真正的appender - 在它通過規則得到「清晰」信號之後。我只是希望有人已經做到了或者更好。 – Flyhard 2014-09-24 13:23:12