如何将Rails错误记录到单独的日志文件中?

Chr*_*ott 13 logging ruby-on-rails

我们的生产日志很长,包含的不仅仅是错误.我想要一个只有错误/异常的第二个日志文件.

这可能吗?

我们正在使用rails 2.x.

谢谢.

Mic*_*per 7

请尝试以下方法.将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
Run Code Online (Sandbox Code Playgroud)

如果你使用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
Run Code Online (Sandbox Code Playgroud)


Mik*_*wis 6

例如,要在名为log/exceptions.log的文件中记录所有ActiveRecord :: Base错误

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
Run Code Online (Sandbox Code Playgroud)

对于控制器和视图(因为ActionView记录器没有它自己的记录器,所以它取决于ActionController记录器):

ActionController::Base.logger = new_logger
Run Code Online (Sandbox Code Playgroud)

  • 怎么会只有错误?你清楚地记录了一个信息,它最终出现在exceptions.log中? (3认同)
  • 这个答案没有回答这个问题.这是主题.它告诉我们如何从不同的应用程序层/模块登录到不同的文件,而不是如何将debug/info/error/warn等级别的消息记录到单独的文件中. (2认同)