Java logback是否有空附加器?

Java logback是否有空附加器?,java,logging,logback,Java,Logging,Logback,我知道log4j中有一个NullAppender。但我在logback中找不到appender。是否有更好的方法可以忽略logback中的所有日志?将日志级别设置为关闭将忽略所有日志 <logger name="..." level="OFF" /> 我只是好奇,使用空Appender(我相信它是一个不做任何事情的Appender)有什么意义,而您可以简单地不将任何Appender设置为记录器 而且,关闭所有日志的正确方法是将日志级别设置为off 有了@djechlin的评论,我

我知道log4j中有一个
NullAppender
。但我在logback中找不到appender。是否有更好的方法可以忽略logback中的所有日志?

将日志级别设置为
关闭将忽略所有日志

<logger name="..." level="OFF" />

我只是好奇,使用空Appender(我相信它是一个不做任何事情的Appender)有什么意义,而您可以简单地不将任何Appender设置为记录器

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


有了@djechlin的评论,我相信在LogBack中也值得一提过滤器。如果您只想关闭通过appender的所有消息,只需使用阈值过滤器:

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

关
.... 其他配置

您始终可以编写一个:

public class NullAppender extends UnsynchronizedAppenderBase<ILoggingEvent> {

    @Override
    protected void append(ILoggingEvent eventObject) {
        //no-op
    }
}
公共类NullAppender扩展了UnsynchronizedAppenderBase{
@凌驾
受保护的void append(ILOGingEvent eventObject){
//无操作
}
}

这是一个老问题,但已经给出的答案实际上并没有回答它

有一个“null”appender,但它不是这样叫的。我相信logback的作者更喜欢术语“no op”,指的是那些满足编译、测试或其他设计需求,但实际上不执行任何操作的实现。最初询问的appender实现是:

ch.qos.logback.core.helpers.NOPAppender


要添加到ZachOfAllTrades的答案中,下面是一个示例
logback.xml
,它将根日志级别设置为
INFO
,但使用
noappender
将所有内容记录到nirvana:

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


我在项目中有许多pkg,它们共享相同的根配置。我只想忽略pkg1中类的所有日志,然后简单地将pkg1的日志级别设置为OFF。这是使用类似log4j的日志库的主要目的之一:您可以控制单个日志程序(及其子日志程序)的行为。如果您有一个空的appender,您仍然需要配置log4j以将记录器pkg1设置为使用空appender,并将其additivity设置为false,这与您为pkg1设置日志级别的位置完全相同。许多需要一个appender的记录器都应该根据配置禁用(例如dev/prod)。要进行干式更改,需要将appender置空。@djechlin可能存在适当的情况。然而,考虑到Logback中的大多数(如果不是全部的话)内置appender确实提供了对筛选器的支持,您可以通过设置阈值筛选器并将阈值设置为OFF来轻松完成所需的操作。这甚至使配置在不同的环境中更加可重用(并且更加干燥)。这过滤掉了Hibernate生成的大量消息,而不进行任何输出。警告Hibernate消息随后被传递到根记录器以获得正常输出。这个问题显然不是重复的。筛选出与指定空追加器的功能完全不同。+1。你能在你的答案中添加一些细节来展示一个例子吗。可能类似于:
但您必须在标记中填写“name”属性,这将限制应用“level=off”的日志。