2011-03-29 99 views
13

我们的生产日志很长,包含的不仅仅是错误。我想第二个日志文件只有错误/例外。如何将Rails错误记录到单独的日志文件中?

这可能吗?

我们正在使用rails 2.x

谢谢。

+0

可能重复[如何登录的Rails在一个独立的日志文件的东西吗?( http://stackoverflow.com/questions/337739/how-to-log-something-in-rails-in-an-independent-log-file) – fl00r 2011-03-29 15:30:04

+4

我不认为它是重复的 - 这是一个不同的问题。关于如何自动将标准日志文件分成更细粒度的部分 - 而不是手动记录到单独的文件。 – 2011-03-29 16:16:10

回答

5

例如,记录所有的ActiveRecord :: Base的错误,在一个名为日志文件/ 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 

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

ActionController::Base.logger = new_logger 
+1

有没有办法做到这一般的例外?或者可能会将erb/controller错误记录到他们自己的文件中? – 2011-03-29 16:13:18

+0

发表如何做控制器/视图。 – 2011-03-29 16:18:10

+3

它怎么会只有错误?你清楚地记录了一个信息,它以异常结束。 – Khash 2011-05-26 17:48:21

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 

如果您使用的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 
相关问题