我已经使用
配置了sysout-over-slf4jSysOutOverSLF4J.sendSystemOutAndErrToSLF4J()
System.out
和System.err
不再显示在控制台上,因此它似乎正在捕获它们。但是,它没有出现在我的任何记录器中。
更新:配置:
我已尝试过各种配置,但我尝试过的是厨房水槽:
<configuration>
<appender name="FILE" class="ch.qos.logback.core.FileAppender">
<file>/Users/arne/log/sandbox.log</file>
<append>true</append>
<encoder>
<pattern>%d\t%level\t[%thread]\t%logger{35}\t%msg%n</pattern>
</encoder>
</appender>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d [%thread] %-5level %logger{35} - %msg%n</pattern>
</encoder>
</appender>
<root level="DEBUG">
<appender-ref ref="STDOUT"/>
<appender-ref ref="FILE"/>
</root>
</configuration>
由于SysOutOverSLF4J
默认情况下似乎转到INFO和ERROR,我认为DEBUG应该全部捕获。我只是尝试了TRACE,但仍然没有。我的简单测试看起来像这样:
object LoggerTest extends App with LazyLogging {
SysOutOverSLF4J.sendSystemOutAndErrToSLF4J()
logger.debug("to log")
System.out.print("to System.out")
System.err.print("to System.err")
}
产生这个输出:
2015-04-24 09:23:16,859 [main] DEBUG u.o.l.s.c.SysOutOverSLF4JInitialiser - Your logging framework class ch.qos.logback.classic.Logger should not need access to the standard println methods on the console, so you should not need to register a logging system package.
2015-04-24 09:23:16,869 [main] INFO u.o.l.s.context.SysOutOverSLF4J - Replaced standard System.out and System.err PrintStreams with SLF4JPrintStreams
2015-04-24 09:23:16,872 [main] INFO u.o.l.s.context.SysOutOverSLF4J - Redirected System.out and System.err to SLF4J for this context
2015-04-24 09:23:16,873 [main] DEBUG sandbox.LoggerTest$ - to log
您的日志框架类ch.qos.logback.classic.Logger不应该需要访问
我认为上面应该是一个暗示,由我不&#39我的问题,知道做的是什么,因为没有SysOutOverSLF4J
的logback不捕获STDOUT
或STDERR
或者,这就是我首先使用它的原因。
答案 0 :(得分:-2)
SysOutOverSLF4J.sendSystemOutAndErrToSLF4J(LogLevel.DEBUG, LogLevel.ERROR);
它应该有效!