sysout-over-slf4j捕获System.out但不写入logback

时间:2015-04-23 23:47:58

标签: java slf4j logback

我已经使用

配置了sysout-over-slf4j
SysOutOverSLF4J.sendSystemOutAndErrToSLF4J()

System.outSystem.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不捕获STDOUTSTDERR或者,这就是我首先使用它的原因。

1 个答案:

答案 0 :(得分:-2)

SysOutOverSLF4J.sendSystemOutAndErrToSLF4J(LogLevel.DEBUG, LogLevel.ERROR);

它应该有效!