如何使用Logback在Java程序中捕获System.out消息?
例如,我想使用此代码:
System.out.println("test: console out to file instead");
...并将其输出到文件中。
可以使用logback.xml配置文件吗?
答案 0 :(得分:7)
有一个小罐子可以帮到你:http://projects.lidalia.org.uk/sysout-over-slf4j/index.html
请阅读常见问题解答:http://projects.lidalia.org.uk/sysout-over-slf4j/faq.html - 如果您使用此模块并配置logback以输出到stdout,您将获得 StackOverFlowError 的流:D
如果你想自己做,你需要用自定义PrintWriter
替换System.out和System.err(?我不能完全记住类名)。这个自定义PrintWriter
需要以半智能的方式将调用转发到logback,因为打印文本也可以逐个字符而不是按行打印。
答案 1 :(得分:1)
sysout-over-slf4j解决方案100%回答问题。
请注意:如果您设置了Java Util Logger - > SLF4j bridge(jul-to-slf4j),所有System.out.println消息也将在您的logback日志文件中,以及打印到Java util logger的所有消息。
答案 2 :(得分:-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>