【问题标题】:How can I log Rails errors into a separate log file?如何将 Rails 错误记录到单独的日志文件中?
【发布时间】:2011-07-25 09:39:15
【问题描述】:

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

这可能吗?

我们使用的是 rails 2.x

谢谢。

【问题讨论】:

标签: ruby-on-rails logging


【解决方案1】:

例如,在名为 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

对于控制器和视图(因为ActionView logger没有自己的logger,所以依赖于ActionController logger):

ActionController::Base.logger = new_logger

【讨论】:

  • 一般情况下有没有办法对异常执行此操作?或者也可以将 erb / 控制器错误记录到他们自己的文件中?
  • 发布了如何做控制器/视图。
  • 怎么会只有错误?您显然在记录信息,但它最终出现在 exceptions.log 中?
  • 这个答案没有回答问题。这是题外话。它告诉如何从不同的应用程序层/模块记录到不同的文件,而不是如何将调试/信息/错误/警告等级别的消息记录到单独的文件中。
【解决方案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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-01
    • 2013-08-13
    • 1970-01-01
    相关资源
    最近更新 更多