【发布时间】:2011-07-25 09:39:15
【问题描述】:
我们的生产日志很长,包含的不仅仅是错误。我想要第二个日志文件,其中只有错误/异常。
这可能吗?
我们使用的是 rails 2.x
谢谢。
【问题讨论】:
-
我不认为这是重复的 - 这是一个不同的问题。关于如何自动将标准日志文件拆分为更细粒度的部分——而不是手动记录到单独的文件中。
标签: ruby-on-rails logging
我们的生产日志很长,包含的不仅仅是错误。我想要第二个日志文件,其中只有错误/异常。
这可能吗?
我们使用的是 rails 2.x
谢谢。
【问题讨论】:
标签: ruby-on-rails logging
例如,在名为 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
【讨论】:
试试下面的。将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
【讨论】: