Logback 忽略父包的记录器

Logback ignore logger of parent package

Logback 忽略父包的记录器。

我有那些附加程序:

appender

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

如何配置 root logger 收集并通过appender 打印的logback 所有TRACE 日志消息,my logger 收集并打印打印包 my 的所有 DEBUG 消息,不包含包 my.testmy.test 记录器收集并打印所有 INFOmy.test 及以下的消息?

使用级别过滤器

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

更新

如果您需要 ERROR 和 WARN,请将 ThresholdFilter 与 WARN 一起使用(如下所示),如果您需要信息、错误和警告,请将阈值过滤器用作信息(我相信这是默认行为)

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