Matthew
Matthew

Reputation: 8426

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?

Upvotes: 18

Views: 19076

Answers (3)

Max
Max

Reputation: 1157

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

Upvotes: 3

Augusto
Augusto

Reputation: 30007

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 StackOverFlowErrors :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.

Upvotes: 12

Sirsendu
Sirsendu

Reputation: 273

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>

Upvotes: -3

Related Questions