logback で全く同じパッケージで特定レベル以上だけ別ファイル"にも"出す方法


運用時の監視用に普段出してるログと同じパッケージで
ERROR が出た時だけ、外のファイルにも出したい時とかあるよね!!
で、普段のログは 30 日とっておけばいいけど、そっちのログは手動以外では消せないようにしたいとかあるよね!!
っていうか実際にあったんだ……

で、色々調べてもわからなかったんだけど、
id:daisuke-m が調べて教えてくれた!!!
ありがとう!!

<configuration>
  <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
    <Target>System.out</Target>
    <layout class="ch.qos.logback.classic.PatternLayout">
      <Pattern>%d [%thread] %-5level %logger{35} - %msg%n
      </Pattern>
    </layout>
  </appender>

  <!--Daily rolling file appender -->
  <appender name="FILE"
    class="ch.qos.logback.core.rolling.RollingFileAppender">
    <File>logging.log</File>
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
      <FileNamePattern>logging.%d{yyyy-MM-dd}.log</FileNamePattern>
      <MaxHistory>30</MaxHistory>
    </rollingPolicy>
    <layout class="ch.qos.logback.classic.PatternLayout">
      <Pattern>%d [%thread] %-5level %logger{35} - %msg%n
      </Pattern>
    </layout>
  </appender>

  <!--Daily rolling file appender -->
  <appender name="ALERT"
    class="ch.qos.logback.core.rolling.RollingFileAppender">
    <File>/var/log/alert_log</File>
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
      <FileNamePattern>/var/log/alert_log.%d{yyyy-MM-dd}</FileNamePattern>
    </rollingPolicy>
    <layout class="ch.qos.logback.classic.PatternLayout">
      <Pattern>%d [%thread] %-5level %logger{35} - %msg%n
      </Pattern>
    </layout>
    <filter class="ch.qos.logback.classic.filter.ThresholdFilter"><!-- これ -->
      <level>ERROR</level>
    </filter>
  </appender>

  <logger name="org.yoshiori" level="DEBUG">
    <appender-ref ref="FILE" />
    <appender-ref ref="ALERT" />
  </logger>

  <root>
    <level value="INFO" />
    <appender-ref ref="STDOUT" />
    <appender-ref ref="FILE" />
  </root>
</configuration>


appender の方で filter 掛ければ良いっぽい
http://logback.qos.ch/manual/filters.html#thresholdFilter


ちなみに特定レベルのみを無視したりしたい時には
http://logback.qos.ch/manual/filters.html#levelFilter
使えばいいみたい!!!