Formatting the Rails logger
I’ve always been somewhat annoyed that Rails 2 doesn’t have a way to specify the log formatting. I would prefer that log messages include the logging level, for example.
Thanks to a post on Stack Overflow, I realized it’s pretty simple to override BufferedLogger.add to do what I want:
module ActiveSupport
class BufferedLogger
def add(severity, message = nil, progname = nil, &block)
return if @level > severity
message = (message || (block && block.call) || progname).to_s
level = {
0 => "DEBUG",
1 => "INFO",
2 => "WARN",
3 => "ERROR",
4 => "FATAL"
}[severity] || "U"
message = "[%s] %-6s%s" % [Time.now.strftime("%Y-%m-%d %H:%M:%S"), level,
message]
message = "#{message}\n" unless message[-1] == ?\n
buffer << message
auto_flush
message
end
end
end
Adding this to environment.rb will cause the logger to print log messages in the format
[2010-04-13 11:55:20] DEBUG monkeys

