如何使用Logback将System.out重定向到日志文件?

时间:2016-08-26 15:41:50

标签: java logging logback slf4j

如何使用Logback在Java程序中捕获System.out消息?

例如,我想使用此代码:

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

...并将其输出到文件中。

可以使用logback.xml配置文件吗?

3 个答案:

答案 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的所有消息。

以下是设置方法: https://stackoverflow.com/a/43242620/2359435

答案 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>