2016-08-26 1500 views
4

如何使用Logback在Java程序中捕獲System.out消息?如何使用Logback將System.out重定向到日誌文件?

比如我想使用此代碼:

System.out.println("test: console out to file instead"); 

...並捕獲它的輸出到文件。

這可以使用logback.xml配置文件來完成嗎?

+0

http://fahdshariff.blogspot.no/2010/10/redirect-stdout-to-logger.html –

回答

4

有一個小罐子,這是否對你:http://projects.lidalia.org.uk/sysout-over-slf4j/index.html

請務必閱讀FAQ:http://projects.lidalia.org.uk/sysout-over-slf4j/faq.html - 如果使用該模塊和配置logback輸出到標準輸出,你會得到一個流StackOverFlowError s:D

如果你想自己做這個,你需要替換System.out和系統.err與自定義PrintWriter(?我不能完全記住類名)。此自定義PrintWriter需要以半智能方式將呼叫轉發到登錄,因爲打印機也可以逐字打印而不是按行打印。

+0

我懷疑我是在錯誤的路徑上試圖重定向標準輸出,而不是在代碼中創建記錄器對象。如果需要一個jar來做到這一點,那麼我懷疑沒有logback的基本配置,xml來實現我的目標。 – Matthew

+1

不需要jar,只需在代碼中設置System.out和System.err即可。只要看看System類的方法。唯一需要做的就是傳遞一個OutputStream輸出到一個文件(例如FileOutputStream) – n247s

+1

@Matthew正如項目的主頁所說,對於非常舊的代碼或不好的庫來說,它是一個'hack'。你不應該依靠這樣的東西來構建一個新的應用程序。那裏的代碼不是超級複雜的。 – Augusto

-1

是的,你可以用一些配置類似做..

<appender name="stdout" class="ch.qos.logback.core.ConsoleAppender"> 
    <target>System.out</target> 
    <filter class="com.foo.StdOutFilter" /> 
    ... 
</appender> 
<logger name="mylogger" level="debug"> 
    <appender-ref ref="stdout" /> 
</logger> 
+3

這是記錄到控制檯。問題與此相反,事實上,捕獲System.out並將其寫入文件。 – rustyx

相關問題