Как я могу регистрировать ошибки Rails в отдельный файл журнала?

Наши журналы производства длинны и содержат намного больше, чем просто ошибки. Мне нужен второй файл журнала с ошибками/исключениями.

Возможно ли это?

Мы используем рельсы 2.x

Спасибо.

Ответы

Ответ 1

Например, чтобы регистрировать все ошибки ActiveRecord:: Base в файле с именем log/exceptions.log

new_logger = Logger.new('log/exceptions.log')
new_logger.level = Logger::ERROR
new_logger.error('THIS IS A NEW EXCEPTION!')

ActiveRecord::Base.logger = new_logger

Для контроллеров и просмотра (поскольку в Logger LogView нет собственного журнала, поэтому он зависит от регистратора ActionController):

ActionController::Base.logger = new_logger

Ответ 2

Попробуйте следующее. Поместите метод rescue_from в ваш контроллер.

Я не тестировал это. Но, возможно, это ставит вас в правильном направлении.

class ApplicationController < ActionController::Base
  rescue_from StandardError do |exception|
    new_logger = Logger.new('log/exceptions.log')
    new_logger.info('THIS IS A NEW EXCEPTION!')
    new_logger.info(exception.message)
    new_logger.info(exception.backtrace)
    # Raise it anyway because you just want to put it in the log
    raise exception
  end
end

Если вы используете Rails 2.1 (также не проверены)

class ApplicationController < ActionController::Base
  def rescue_action_in_public(exception)
    new_logger = Logger.new('log/exceptions.log')
    new_logger.info('THIS IS A NEW EXCEPTION!')
    new_logger.info(exception.message)
    new_logger.info(exception.backtrace)
    # Raise it anyway because you just want to put it in the log
    raise exception
  end
end