在我的应用程序中,我想以特定的方式记录来自我自己的代码的一些消息,与记录的所有其他消息相比。但是我不确定如何避免将它们自动记录到logack根记录器中。
使用下面的配置,我想使用如下代码(scala),以便我只能将某些消息记录到该记录器。
val logger: Logger = LoggerFactory.getLogger("data-logger")
但是在下面的配置中,这些消息会被记录两次,即根记录器也会记录它们。我怎么能避免这种情况?我是否必须人为地使用不同的日志记录级别来完成具有logback的事情?
<configuration>
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>logs/activity.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
<fileNamePattern>activity.%i.log.zip</fileNamePattern>
<minIndex>1</minIndex>
<maxIndex>10</maxIndex>
</rollingPolicy>
<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<maxFileSize>10MB</maxFileSize>
</triggeringPolicy>
<encoder>
<pattern>%msg%n</pattern>
</encoder>
</appender>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%msg%n</pattern>
</encoder>
</appender>
<appender name="ASYNC" class="ch.qos.logback.classic.AsyncAppender">
<!-- use discarding threshold of zero to avoid ignoring INFO level messages see docs -->
<discardingThreshold>0</discardingThreshold>
<appender-ref ref="FILE" />
</appender>
<root level="info">
<appender-ref ref="STDOUT" />
<appender-ref ref="ASYNC" />
</root>
<logger name="data-logger" level="info">
<appender-ref ref="STDOUT" />
<appender-ref ref="ASYNC" />
</logger>
</configuration>
答案 0 :(得分:17)
记录器是分层的,默认情况下,发送到记录器的任何消息都将发送给它的所有祖先。您可以通过设置additivity=false
来禁用此行为。 E.g:
<logger name="data-logger" level="info" additivity="false">