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