Добавить текущее время до сообщения журнала

Я создал собственный логгер для своего приложения под названием 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 в мое сообщение журнала, но я хотел бы знать, есть ли способ добавить его по умолчанию для каждого сообщения журнала. Как я могу это сделать?

Спасибо.

Ответы

Ответ 1

Самый простой способ сделать 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!

Ответ 2

Вы можете переопределить правильный метод (например, добавив следующее в environment.rb или в инициализатор):

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

[Предостережение: это может нарушить работу других регистраторов; см. ответ Стивена для безопасного решения - jph]