0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Last updated at Posted at 2017-03-12

結論から言うと、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);
        }

なので、以下のように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

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?