gpt4 book ai didi

java - Logback忽略父包的记录器

转载 作者:太空宇宙 更新时间:2023-11-04 06:08:49 26 4
gpt4 key购买 nike

Logback 忽略父包的记录器。

我有那些附加程序:

附加器

<appender name="fileAppender1" class="ch.qos.logback.core.FileAppender">
<file>myLogFile1.log</file>
<encoder>
<pattern>%d [%thread] %-5level %logger - %msg%n</pattern>
</encoder>
</appender>
<appender name="fileAppender2" class="ch.qos.logback.core.FileAppender">
<file>myLogFile2.log</file>
<encoder>
<pattern>%d [%thread] %-5level %logger - %msg%n</pattern>
</encoder>
</appender>
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d [%thread] %-5level %logger - %msg%n</pattern>
</encoder>
</appender>

还有 3 个记录器:

记录器 1

<logger name="my" level="INFO" additivity="false" >
<appender-ref ref="fileAppender1" />
</logger>

记录器 2

<logger name="my.test" level="DEBUG" additivity="false" >
<appender-ref ref="console" />
</logger>

记录器3

<root level="TRACE">
<appender-ref ref="fileAppender2" />
</root>
  • 如果我使用其中三个,我只能得到第二个记录器的工作。 (最权威的)
  • 如果我删除additivity="false",所有记录器都会写入相同级别的相同信息(最高 - INFO)

如何配置日志记录,根记录器通过附加程序收集和打印所有TRACE日志消息,my记录器收集并打印包my的所有DEBUG消息,不带包my.testmy.test记录器收集并打印包my.test的所有INFO消息并向下?

最佳答案

使用级别过滤器

<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>INFO</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>

因此你的 logback.xml 将变成

<appender name="fileAppender1" class="ch.qos.logback.core.FileAppender">
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>INFO</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
<file>myLogFile1.log</file>
<encoder>
<pattern>%d [%thread] %-5level %logger - %msg%n</pattern>
</encoder>
</appender>
<appender name="fileAppender2" class="ch.qos.logback.core.FileAppender">
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>TRACE</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
<file>myLogFile2.log</file>
<encoder>
<pattern>%d [%thread] %-5level %logger - %msg%n</pattern>
</encoder>
</appender>
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>DEBUG</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
<encoder>
<pattern>%d [%thread] %-5level %logger - %msg%n</pattern>
</encoder>
</appender>

<logger name="my" level="INFO" additivity="false" >
<appender-ref ref="fileAppender1" />
</logger>

<logger name="my.test" level="DEBUG" additivity="false" >
<appender-ref ref="console" />
</logger>

<root level="TRACE">
<appender-ref ref="fileAppender2" />
</root>

更新

如果您需要错误和警告,请使用带有警告的 ThresholdFilter(如下所示),如果您需要信息、错误和警告,请使用阈值过滤器作为信息(我认为这是默认行为)

<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>WARN</level>
</filter>

关于java - Logback忽略父包的记录器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28988107/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com