Stats of the Rivers

川の様子を見に行ってます。

exception_notification_fluent_logger_notifier というのをつくった

exception_notification_fluent_logger_notifier という異様に長い名前の gem を作りました。長すぎて RubyGems.org のフォーマットが崩れます。*1

インストールすることで ExceptionNotifier::FluentLoggerNotifier というクラスが生えます。

exception_notification はRack などに仕込んで例外が出たら通知を行なう gem です。

通知の方法として、メールや HipChat などいくつか組み込みの notifier があるのですが、独自の notifier を作成する方法が提供されています。 今回作った ExceptionNotifier::FluentLoggerNotifier は、例外が発生した際に fluent-logger-ruby を経由して Fluentd にデータを送ることができます。

Rails で使用する場合は、 config/environments/production.rb などに以下のような設定を記載することで動かすことができるというものです。

Whatever::Application.config.middleware.use ExceptionNotification::Rack,
  :fluent_logger => {
    :tag_prefix => "exceptions",
    :logger_settings => {
      :host => "localhost",
      :port => 8888,
    }
    :template => {
      :exception_class => ->(exception, options) { exception.class_name },
      :exception_message => -> (exception, options) { exception.messaage },
    }
  }

ユースケースとしてはいくつか考えられると思いますが、私の場合は fluent-plugin-hipchat で HipChat に例外を通知するのに使っています。 *2

*1:https://rubygems.org/gems/exception_notification_fluent_logger_notifier

*2:もちろん exception_notification 組み込みの HipChat notifier を使ってもいいのですが、通知のフォーマットを自由に設定できること、アプリが HipChat の API トークンについて気にしなくていいこと、などで FluentLoggerNotifier 経由で通知する方が優れています