2011-03-29 26 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 
相關問題