如何使用Logback在Java程序中捕獲System.out消息?如何使用Logback將System.out重定向到日誌文件?
比如我想使用此代碼:
System.out.println("test: console out to file instead");
...並捕獲它的輸出到文件。
這可以使用logback.xml配置文件來完成嗎?
如何使用Logback在Java程序中捕獲System.out消息?如何使用Logback將System.out重定向到日誌文件?
比如我想使用此代碼:
System.out.println("test: console out to file instead");
...並捕獲它的輸出到文件。
這可以使用logback.xml配置文件來完成嗎?
有一個小罐子,這是否對你: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
需要以半智能方式將呼叫轉發到登錄,因爲打印機也可以逐字打印而不是按行打印。
我懷疑我是在錯誤的路徑上試圖重定向標準輸出,而不是在代碼中創建記錄器對象。如果需要一個jar來做到這一點,那麼我懷疑沒有logback的基本配置,xml來實現我的目標。 – Matthew
不需要jar,只需在代碼中設置System.out和System.err即可。只要看看System類的方法。唯一需要做的就是傳遞一個OutputStream輸出到一個文件(例如FileOutputStream) – n247s
@Matthew正如項目的主頁所說,對於非常舊的代碼或不好的庫來說,它是一個'hack'。你不應該依靠這樣的東西來構建一個新的應用程序。那裏的代碼不是超級複雜的。 – Augusto
是的,你可以用一些配置類似做..
<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>
這是記錄到控制檯。問題與此相反,事實上,捕獲System.out並將其寫入文件。 – rustyx
http://fahdshariff.blogspot.no/2010/10/redirect-stdout-to-logger.html –