airbrake-logbackを非同期化することができなかった
背景
Logbackとは
- Logback は巷で大人気の log4j プロジェクトの後継プロジェクト
- java製のデファクトっぽいロギングライブラリ
Airbrakeとは
- 商用のエラートラッキングシステム
Errbitとは
- AirbrakeのOSSクローン
airbrake-logbackとは
- logback はロギングイベントを出力する仕事を、アペンダーと呼ばれるコンポーネントに任せています
- つまり、LogbackのAirbrakeのためのアペンダー -> Logback Appender for Airbrake
非同期にしたいということはどういうことか
- logbackのappenderをAsyncAppenderにしたいということ
- 例: 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 | - | 何も飛ばない 🙅 |
まとめ
- できなかった
- そんなに困ってる訳ではないのであきらめた