Rubyプログラムでスローされた例外をキャッチしてファイルに記録するライブラリがありますか?私はlog4rとloggerを見てきましたが、両方のドキュメントには私がこれを行う方法の例はありません。私はこのプログラムをリモートで実行し、その情報がまったく役に立ったらstdoutとstderrへのハンドルを失います。Rubyで自動的に例外をログに記録する
お勧めですか?
Rubyプログラムでスローされた例外をキャッチしてファイルに記録するライブラリがありますか?私はlog4rとloggerを見てきましたが、両方のドキュメントには私がこれを行う方法の例はありません。私はこのプログラムをリモートで実行し、その情報がまったく役に立ったらstdoutとstderrへのハンドルを失います。Rubyで自動的に例外をログに記録する
お勧めですか?
、これを試してみてください。
class Exception
alias real_init initialize
def initialize(*args)
real_init *args
# log the error (self) or its args here
end
end
これは創造の瞬間に新しい例外オブジェクトの作成をインターセプトします。
レスキューfrom Exception
。このような何かはおそらく理にかなって:
begin
# run your code here ..
rescue Exception => exception
# logger.error(...) ....
raise exception
end
これは例外をログに記録し、アプリケーションが実際にログに加えて、エラーが発生するように、それを再発生させます。
exception
はException
のインスタンスです。このオブジェクトでできること(バックトレースへのアクセスなど)については、the docsを参照してください。あなたは野生の側の散歩をしたい場合は
ええと、それは私がやらなければならないことを恐れていたことです。関与するコードは基本的に1つのクラスであり、いくつかのメソッドがあります。私はちょうどすべての方法に始まり/救助を入れなければならないのでしょうか、それとも簡単な方法がありますか? –
おそらくインスタンスを作成しています。インスタンスを作成する場所にレスキューブロックを置いてください。 –
インスタンス作成コードに置くことは、エラーが作成中でない限りうまくいくことはありません。エラーが発生した場合は、全世界に渡って本体をラップしてください。 – MarkusQ
Railsアプリを実行している場合、Exception Notificationプラグインは非常に便利です。
ああ、私は間違いなくそれを見ましたが、問題の私のアプリはRailsアプリではありません。しかし、ありがとう! –
私はこのようなものでした場合、それが働くだろう:私はすべての私のキャッチされない例外を持つようにされる必要がある何
begin
main()
rescue Exception => e
myCustomErrorLogger(e)
end
def main()
# All the application code comes here.
end
は、最上位レベルに移動し、そこにキャッチされ、その後エラーログで記録されるが関数。
私は今これを試していますが、あなたの提案を得ることは素晴らしいことです。
理由とバックトレースを標準出力する部分のExceptionクラスのコードを調整できます。
ロガーがnullになる可能性があるかどうかを確認することを忘れないでください。ロガーが作成された前(またはその間)に例外をスローすることができます。
ありがとうMarkus!ワイルドサイドがうまくいくなら、私はそれを歩きたいと思っています! –
upvoted for creativity! –
これは楽しいですが、私は例外をモンキーにすることに非常に注意しています... –