【问题标题】:Add current time before log message在日志消息之前添加当前时间
【发布时间】:2011-07-07 13:52:24
【问题描述】:

我为我的应用程序创建了一个自定义记录器,称为 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 添加到我的日志消息中,但我想知道是否有办法将其默认添加到每条日志消息中。我该怎么做?

谢谢。

【问题讨论】:

    标签: ruby-on-rails ruby timestamp logging


    【解决方案1】:

    您可以重新定义正确的方法(例如,将以下内容添加到 environment.rb 或在初始化程序中):

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

    [注意:这可能会干扰其他记录器;请参阅斯蒂芬的答案以获得安全的解决方案 - jph]

    【讨论】:

    • 如果它有效,请接受它作为答案,这样其他有相同问题的人将来会立即发现它。 :-)
    • 我添加了一种侵入性较小的方法来处理这个问题。无论如何,如果您计划重载该方法以避免在运行时修改其他活动记录器的行为,我建议在实例上子类化 Logger 或重新定义 format_message
    【解决方案2】:

    制作 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!
    

    【讨论】:

      猜你喜欢
      • 2021-12-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-08
      相关资源
      最近更新 更多