rails3.0.3でログにタイムスタンプを表示する方法
今私が運用中のアプリの中に、rails3.0.3ベースのものが2つあります。
railsのデフォルトのロガーはなんと日時を表示してくれず、
障害発生時に困ることがしばしばでした。
そこで、ログに日時が表示されるようにカスタマイズしてみました。
rails標準のログ出力と、p出力の両方に対して、日時が表示されるようにしました。
1.p
荒っぽいですが、config/boot.rbに手を入れました。次のコードを追記します。
module Kernel
alias original_p p
def p(str)
original_p("[#{Time.now.to_s(:db)}] #{str}")
end
end
2.railsログ
config/initializersにlog_with_time.rbを追加しました。
module ActiveSupport
class BufferedLogger
def add(severity, message = nil, progname = nil, &block)
return if @level > severity
message = (message || (block && block.call) || progname).to_s
# If a newline is necessary then create a new message ending with a newline.
# Ensures that the original message is not mutated.
message = "[#{Time.now.to_s(:db)}] #{message}\n" unless message[-1] == ?\n
buffer << message
auto_flush
message
end
end
end
rubyはオープンクラスで既存のクラスを編集できるので非常に便利ですね。