Help us understand the problem. What is going on with this article?

Dropwizardからairbrake-logbackでErrbitにうまくログが送れないことがある問題調査

More than 3 years have passed since last update.

結論から言うと、Dropwizard 0.8の問題だった。


  • ERROR以上をErrbitに送るとする(threshold
  • net.anthavio:airbrake-logback:1.0.1を利用
  • net.anthavio.airbrake.AirbrakeLogbackAppender.Notify#ALLとする
  • logger.errorで明示的にERRORを吐く

上記のような時、airbrake-logbackの以下でNPEが発生する。

        } else if (notify == Notify.ALL) {
            StackTraceElement[] stackTrace = event.getCallerData(); // NPE
            AirbrakeNotice notice = new AirbrakeNoticeBuilderUsingFilteredSystemProperties(apiKey, event.getFormattedMessage(), stackTrace[0], env).newNotice();
            airbrakeNotifier.notify(notice);
        }

https://github.com/anthavio/airbrake-logback/blob/v1.0.1/src/main/java/net/anthavio/airbrake/AirbrakeLogbackAppender.java#L112

なので、以下のようにnullチェックをすれば回避は出来る。

        } else if (notify == Notify.ALL) {
            StackTraceElement[] stackTrace = event.getCallerData();
            StackTraceElement stackTraceElement = null;
            if (stackTrace.length > 0) {
                stackTraceElement = stackTrace[0];
            }
            AirbrakeNotice notice = new AirbrakeNoticeBuilderUsingFilteredSystemProperties(
                    apiKey, event.getFormattedMessage(), stackTraceElement, env)
                    .newNotice();
            airbrakeNotifier.notify(notice);
        }

色々調べてみると、Dropwizard 0.9からincludeCallerDataというプロパティが設定出来るようになり、これを設定ファイルのyamlでtrueにしておけばNPEが発生しないことが分かった。
callerDataというのはLogbackの何かの設定っぽい?

修正されたコミット
https://github.com/dropwizard/dropwizard/commit/24fb50e0b44d56e02fafe170bbf0c066bb01d4ae#diff-ff8c81f68c5d01d23ec8e969387495eb

PR
https://github.com/dropwizard/dropwizard/pull/995

recruitmp
結婚・カーライフ・進学の情報サイトや『スタディサプリ』などの学びを支援するサービスなど、ライフイベント領域に関わるサービスを提供するリクルートグループの中核企業
http://www.recruit-mp.co.jp/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした