読者です 読者をやめる 読者になる 読者になる

airbrake-logbackを非同期化することができなかった

背景

Logbackとは

Airbrakeとは

Errbitとは

  • AirbrakeのOSSクローン

airbrake-logbackとは

非同期にしたいということはどういうことか

  • 例: AsyncAppenderの設定(logback-examples/src/main/java/chapters/appenders/conc/logback-async.xml
<configuration>
  <appender name="FILE" class="ch.qos.logback.core.FileAppender">
    <file>myapp.log</file>
    <encoder>
      <pattern>%logger{35} - %msg%n</pattern>
    </encoder>
  </appender>
  <appender name="ASYNC" class="ch.qos.logback.classic.AsyncAppender">
    <appender-ref ref="FILE" />
  </appender>
  <root level="DEBUG">
    <appender-ref ref="ASYNC" />
  </root>
</configuration>

結果

airbrakeのappender設定

     <appender name="AIRBRAKE" class="net.anthavio.airbrake.AirbrakeLogbackAppender">
         <apiKey>298c68320df62a7c2a7736ff6cca9b4e</apiKey>
         <env>production - ${config.resource}</env>
         <notify>ALL</notify>
         <url>https://errbit/notifier_api/v2/notices</url>
 
         <filter class="ch.qos.logback.core.filter.EvaluatorFilter">
             <evaluator>
                 <expression>
                     event.getMessage().contains("Logger configuration in conf files is deprecated and has no effect.")
                 </expression>
             </evaluator>
             <onMatch>DENY</onMatch>
         </filter>
 
         <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
              <level>WARN</level>
          </filter>
      </appender>

asyncなappenderの設定

もともと設定されてるAIRBRAKEのappenderをasyncで囲うだけ。

<appender name="ASYNC_AIRBRAKE" class="ch.qos.logback.classic.AsyncAppender">
    <appender-ref ref="AIRBRAKE"/>
</appender>

試した結果

root=info root=warn threshold filter どうなったか
AIRBRAKE ASYNC_AIRBRAKE WARN warnが2回飛ぶ 🙅
ASYNC_AIRBRAKE - WARN 何も飛ばない 🙅
- ASYNC_AIRBRAKE WARN 何も飛ばない 🙅
AIRBRAKE, ASYNC_AIRBRAKE - WARN warnが2回飛ぶ 🙅
- ASYNC_AIRBRAKE - 何も飛ばない 🙅

まとめ

  • できなかった
  • そんなに困ってる訳ではないのであきらめた