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

How to redirect System.out to a log file using Logback?

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

例如,我想使用这个代码:

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

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

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

是的,您可以使用类似于..

的一些配置来完成
<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>

有一个小罐子可以为您做到这一点:http://projects.lidalia.org.uk/sysout-over-slf4j/index.html

请务必阅读常见问题解答:http://projects.lidalia.org.uk/sysout-over-slf4j/faq.html - 如果您使用此模块并将 logback 配置为输出到标准输出,您将获得 WhosebugErrors 流: D

如果你想自己做,你需要用自定义的PrintWriter替换System.out和System.err(?我记不太清class的名字了) .这种习惯 PrintWriter 需要以半智能方式将调用转发给 logback,因为打印作者也可以逐字符而不是逐行打印。

sysout-over-slf4j 解决方案 100% 回答了这个问题。

请注意:如果您设置 Java Util Logger -> SLF4j 桥(jul-to-slf4j),所有 System.out.println 消息也将在您的 logback 日志文件中,以及将所有消息打印到 Java util 记录器。

设置方法如下: