2011-03-29 12 views
13

生産ログは長く、エラーだけではありません。私はちょうどでエラー/例外を除いて、2番目のログファイルをしたいと思います。Railsのエラーを別のログファイルに記録する方法はありますか?

が、これは可能ですか?

私たちはレールを使用しています。2.x

ありがとうございました。

+0

可能複製[独立したログ・ファイル内のRailsで何かを記録するには?]( http://stackoverflow.com/questions/337739/how-to-log-something-in-rails-in-an-independent-log-file) – fl00r

+4

私はそれが重複しないと思う - それは別の問題です。手動で別のファイルにログを記録するのではなく、標準ログファイルをより細かい部分に自動的に分割する方法について説明します。 –

答えて

5

例えば、/ログというファイルに

コントローラとビューのために
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ロガーを持っていないので、それが依存して(それが自分のロガーは、だexceptions.logすべてのActiveRecord ::ベース・エラーをログに記録しますActionControllerのロガーで):

+1

一般的に例外に対してこれを行う方法はありますか?またはerb /コントローラのエラーを自分のファイルにも記録するのでしょうか? –

+0

コントローラ/ビューの操作方法を公開しました。 –

+3

どのようにエラーだけが発生しますか?あなたは明らかに情報を記録しており、それはexceptions.logで終わりますか? – Khash

7

以下を試してください。あなたのコントローラにrescue_fromメソッドを入れてください。

これはテストしていません。あなたがRailsの2.1(もテストされていない)を使用している場合でも、多分それは正しい方向

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 

に入ります

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 
関連する問題