2011-03-29 13 views
13

Nasze dzienniki produkcji są długie i zawierają znacznie więcej niż tylko błędy. Chciałbym drugi plik dziennika z tylko błędami/wyjątkami.Jak mogę zalogować błędy Railsy do oddzielnego pliku dziennika?

Czy to możliwe?

Używamy szyn 2.x

Dzięki.

+0

możliwe duplikat [Jak coś Rails w niezależnym pliku dziennika logowania?] (http://stackoverflow.com/questions/337739/how-to-log-something-in-rails-in-an-independent-log-file) – fl00r

+4

Nie sądzę, że to duplikat - to inne pytanie. Informacje o tym, jak automatycznie dzielić standardowe pliki dzienników na bardziej szczegółowe części - zamiast ręcznie rejestrować w oddzielnym pliku. –

Odpowiedz

5

Na przykład, aby rejestrować wszystkie błędy ActiveRecord :: Base w pliku o nazwie 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 

Dla kontrolerów i widzenia (ponieważ actionView rejestrator nie posiada swój własny rejestrator, więc to zależy w rejestratorze ActionController):

ActionController::Base.logger = new_logger 
+1

Czy istnieje sposób na ogólne wyłączenie wyjątków? lub może również rejestrować błędy erb/kontrolera w swoich własnych plikach? –

+0

Opublikowano, jak robić kontrolery/widoki. –

+3

Jak będą wyświetlane tylko błędy? Wyraźnie rejestrujesz informacje i kończy się to wyjątkami .log? – Khash

7

Spróbuj wykonać następujące czynności. Umieść metodę rescue_from w kontrolerze.

Nie testowałem tego. Ale może to stawia Cię w dobrym kierunku

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 

Jeśli używasz Rails 2.1 (także nie testowane)

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 
Powiązane problemy