简体   繁体   中英

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

How can I use Logback to capture System.out messages in a Java program?

For example, I would like to use this code:

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

... and capture it's output to a file.

Can this be done using the logback.xml config file?

There's a little jar that does this for you: http://projects.lidalia.org.uk/sysout-over-slf4j/index.html

Please do read the FAQ: http://projects.lidalia.org.uk/sysout-over-slf4j/faq.html - If you use this module and configure logback to output to stdout, you'll get a stream of StackOverFlowError s :D

If you want to do this yourself, you need to replace System.out and System.err with a custom PrintWriter (?I cannot fully remember the class name). This custom PrintWriter needs to forward the calls to logback in a semi intelligent manner, as print writters can also print character by character rather than by line.

The sysout-over-slf4j solutions answers the question 100%.

Just take note: If you setup the Java Util Logger -> SLF4j bridge (jul-to-slf4j), all the System.out.println messages will also be in you logback log file, along with all the messages printed to the Java util logger.

Here is how to set it up: https://stackoverflow.com/a/43242620/2359435

Yes you can do it with some configuration similar to..

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM