11

我知道 log4j 中有一个NullAppender。但我在 logback 中找不到附加程序。有没有更好的方法来忽略 logback 中的所有日志?

4

5 回答 5

15

这是一个老问题,但已经给出的答案并没有真正回答它。

是的

有一个“空”附加程序,但这不是它的名称。我相信 logback 作者更喜欢使用“no-op”一词来指代存在以满足某些编译、测试或其他设计要求但实际上不执行任何操作的实现。最初询问的 appender 实现是:

ch.qos.logback.core.helpers.NOPAppender

文档

来源

于 2017-02-17T21:39:01.503 回答
6

将日志级别设置为OFF将忽略所有日志。

<logger name="..." level="OFF" />
于 2013-07-12T08:40:24.377 回答
4

只是好奇,使用 NullAppender 有什么意义(我相信它是一个什么都不做的 Appender),而你不能简单地为记录器设置任何附加程序?

而且,关闭所有日志的正确方法是将日志级别设置为 OFF。


有了@djechlin 的评论,我相信 LogBack 中的过滤器也值得一提。如果您只是想关闭所有通过附加程序的消息,您可以简单地使用阈值过滤器:

<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
    <!-- Deny everything below OFF, that means deny everything -->
    <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
        <level>OFF</level>
    </filter>
    .... other config
</appender>
于 2013-07-12T08:45:07.040 回答
4

你总是可以写一个:

public class NullAppender extends UnsynchronizedAppenderBase<ILoggingEvent> {

    @Override
    protected void append(ILoggingEvent eventObject) {
        //no-op
    }
}
于 2013-07-12T09:02:55.677 回答
2

要添加到 ZachOfAllTrades 的答案,这里有一个示例logback.xml,它将根日志级别设置为INFO但使用 将NOPAppender所有内容记录到必杀技:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
  <appender name="NOP" class="ch.qos.logback.core.helpers.NOPAppender"/>
  <root level="INFO">
    <appender-ref ref="NOP"/>
  </root>
</configuration>
于 2018-10-09T09:21:14.823 回答