Добавить текущее время перед сообщением журнала - PullRequest
17 голосов
/ 02 марта 2011

Я создал собственный регистратор для своего приложения, который называется 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 ]

37 голосов
/ 03 июня 2011

Самый простой способ создать регистратор в формате 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!
8 голосов
/ 02 марта 2011

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

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

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

...