2011-03-29 11 views
13

I nostri registri di produzione sono lunghi e contengono molto più dei semplici errori. Vorrei un secondo file di registro con solo gli errori/le eccezioni.Come posso registrare gli errori di Rails in un file di registro separato?

È possibile?

Utilizziamo rotaie 2.x

Grazie.

+0

possibile duplicato di [Come accedere qualcosa in Rails in un file di log indipendente?] (http://stackoverflow.com/questions/337739/how-to-log-something-in-rails-in-an-independent-log-file) – fl00r

+4

Non penso che sia un duplicato - è una domanda diversa. Informazioni su come suddividere automaticamente i file di registro standard in parti più fini, anziché eseguire manualmente la registrazione in un file separato. –

risposta

5

Ad esempio, per registrare tutti gli errori ActiveRecord :: Base in un file chiamato log/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 

Per i controller e view (perché ActionView logger non disponga di un proprio logger, quindi dipende nel logger ActionController):

ActionController::Base.logger = new_logger 
+1

C'è un modo per fare questo per le eccezioni in generale? o forse anche errori di log erb/controller nei loro stessi file? –

+0

Inserito come fare controllori/viste. –

+3

Come avrà solo gli errori? Stai chiaramente registrando un'informazione e finisce in exceptions.log? – Khash

7

Provare quanto segue. Metti il ​​metodo rescue_from nel tuo controller.

Non l'ho provato. Ma forse ti mette nella giusta direzione

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 

Se si utilizza Rails 2.1 (anche non testato)

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 
Problemi correlati