Railsのログ書式を変更する方法

Ruby on Railsからログ出力すると、日付やログレベルが表示されなくて困る場合があります。そこで、手っ取り早くログフォーマットを変更するスニペットを書いてみました。
ActiveSupportでLoggerの出力メソッドを上書きしてるのが原因のようなので、そこをフックしてログを整形してます。

ActiveSupport::BufferedLogger.class_eval do
 SEVERITIES = self::Severity.constants.inject({}){ |val, con| val[eval("self::#{con}")] = con; val }
 def add_with_format(severity, message = nil, progname = nil, &block)
   add_without_format(severity, nil) { "%s [%s] %s" % [Time.now, SEVERITIES[severity], message] }
 end
 alias_method_chain :add, :format
end

このスニペットを実行すると、
Thu Jun 25 16:23:14 +0900 2009 [INFO] XXXXXXX
のようなログが出力されるようになります。
フォーマットは適当なので、好みに応じて適宜修正してご利用ください。


この記事について