LoginSignup
24
21

More than 5 years have passed since last update.

logrageの使い方

Last updated at Posted at 2015-06-10

logrageはRailsのログをスッキリ表示してくれるツールだ。
こいつが何をやっているか説明する前に、Railsではどのようにログが出力されているかを知る必要がある。
Rails3以降ではログ出力にActiveSupport::Notificationsの仕組みを使うようになった。
これはイベントの発信と受信の仕組みを提供するもので、特定のイベントに反応するリスナーを登録しておくとイベント発生時にそのリスナー(実体はブロック)がコールされる。
Railsでは各種のイベントに応じて、それをログに記録する役割を持つログサブスクライバと呼ばれる物があり、イベントが発生してそれが呼ばれたら、内部でRails.logger(ActiveSupport::Loggerのインスタンス)に対してログ出力させている。

で、logrageは何をするかというと、デフォルトでリッスンしているログサブスクライバをことごとく無効化し、代わりに自分(lograge)がそれらのイベントをリッスンするようにしてるのだ。

使い方

Gemfile

gem 'lograge'

config/environments/development.rb

config.lograge.enabled = true

  config.lograge.custom_options = lambda do |event|
    {:time => event.time}
  end

  config.log_level = :info

これだけで、log/development.logの出力がシンプルになる。
もし、デフォルトのログはそのまま活かしたまま、別にシンプルなログを出したい場合は以下を追加する。

config.lograge.keep_original_rails_log = true
config.lograge.logger = ActiveSupport::Logger.new "#{Rails.root}/log/lograge_#{Rails.env}.log"

これで、log/development.logにはデフォルトのRailsログが、そして、log/lograge_development.logにはシンプルなログが出るようになる。

出力する内容を追加したいときには以下のようにする。
app/application_controller.rb

def append_info_to_payload(payload)
    super
    payload[:host] = request.host
    payload[:ua] = request.user_agent
end

config/environments/development.rb

config.lograge.custom_options = lambda do |event|
    { time: event.time, host: event.payload[:host], ua: event.payload[:ua] }
end

application_controller.rbのコードはActiveSupport::Notificationsのイベントリスナーのブロックに渡すデータをカスタマイズするメソッドで、これはActionControllerに元々定義されているメソッドのオーバーライドをしている。
これによって追加されたデータをdevelopment.rbで使うように設定しているというわけだ。

諸々の注意

  • エラーが発生した時にはuaとかhostとかはログにあらわれてくれない。
24
21
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
24
21