ということで設定するパラメータを探してみたのだけれど、見つからなかった。具体的には日付とログレベルをメッセージの前に出したかった。
initializerで「configuration.logger」に設定すればloggerを入れ替えられるようだけど、なんというか、ちょっとフォーマットを変えたいだけなのでオブジェクトを入れ替えるほどのことでもないよな、と思っていた。そう、いた。
デフォルトのloggerの中身は「ActiveSupport::BufferedLogger」だったのでログを書き出してるところを探してみたら、
activesupport-2.1.0/lib/active_support/buffered_logger.rb
63 def add(severity, message = nil, progname = nil, &block)
64 return if @level > severity
65 message = (message || (block && block.call) || progname).to_s
66 # If a newline is necessary then create a new message ending with a newline.
67 # Ensures that the original message is not mutated.
68 message = "#{message}\n" unless message[-1] == ?\n
69 buffer << message
70 auto_flush
71 message
72 end
こんな感じだったので、
RAILS_ROOT/config/initializers/buffered_logger_ex.rb
1 module ActiveSupport
2 class BufferedLogger
3 def add(severity, message = nil, progname = nil, &block)
4 return if @level > severity
5 message = (message || (block && block.call) || progname).to_s
6 # If a newline is necessary then create a new message ending with a newline.
7 # Ensures that the original message is not mutated.
8 message = "#{message}\n" unless message[-1] == ?\n
9 severity_text = ActiveSupport::BufferedLogger::Severity.constants.detect{|c| eval(c) == severity}.ljust(5)
10 time_text = Time.now.strftime('%Y-%m-%d %H:%M')
11 buffer << "#{time_text} [#{severity_text}] #{message}"
12 auto_flush
13 message
14 end
15 end
16 end
こんなファイルを作って置いてみた。
で、出したいようにログが出るようになった。しかし自分でやっておいてなんだけど、置き換えたadd大きすぎ。不吉な匂いを放ってる気がする。
ちなみに上の「buffered_logger.rb」は2.1.0なのだけれど、2.0.2では
activesupport-2.0.2/lib/active_support/buffered_logger.rb
60 message = "#{message}\n" unless message[-1] == ?\n
61 @buffer << message
62 auto_flush
と、bufferのスコープがローカルではないので、注意が必要。って、あーやっぱりきれいなやり方じゃないよなー。