在日志消息之前添加当前时间

时间:2011-03-02 20:26:51

标签: ruby-on-rails ruby timestamp logging

我为我的应用程序创建了一个名为CRON_LOG的自定义记录器,只需将这段代码添加到config / environment.rb

CRON_LOG = Logger.new("#{Rails.root}/log/cron.log")
CRON_LOG.level = Logger::INFO

然后,当我想记录某些东西时,就这样做:

CRON_LOG.info "something"

它工作正常,但我想在每条日志消息之前添加当前时间戳。当然我可以在我的日志消息中添加Time.now,但我想知道是否有办法将其添加为每条日志消息的默认值。我怎么能这样做?

感谢。

2 个答案:

答案 0 :(得分:37)

制作SysLog格式记录器的最简单方法是直接分配格式化程序:

logger = Logger.new Rails.root.join('path', 'to', 'log')
logger.formatter = Logger::Formatter.new
logger.info 'Hello, world!'
# Writes:
#
#   I, [2011-06-02T20:02:34.579501 #15444]  INFO -- : Hello, world!

答案 1 :(得分:8)

您可以重新定义正确的方法(例如将以下内容添加到environment.rb或初始值设定项中):

class Logger
  def format_message(severity, timestamp, progname, msg)
    "#{timestamp} (#{$$}) #{msg}\n"
  end
end

[警告:这可能会破坏其他记录器;请参阅斯蒂芬对安全解决方案的回答 - jph]