ロギング時にエラーが致命的な場合
-
10-07-2019 - |
質問
log4jなどのロギングフレームワークでは& log4netでは、さまざまなレベルの情報を記録できます。ほとんどのレベルには明確な意図があります(「デバッグ」ログと「エラー」の対比など)。しかし、私がいつも気にかけていたことの1つは、ログを「致命的」に分類することでした。
致命的として分類されるほど深刻なエラーはどのような種類ですか?これはわずかにケースドリブンですが、例外を致命的または単なるエラーとして記録することを決定するときに使用する経験則のいくつかは何ですか?
解決
致命的なエラーは、アプリケーションがこれ以上有用な作業を行えないときと考えています。致命的ではないエラーとは、問題はありますが、機能やパフォーマンスのレベルが低下しても、アプリケーションは引き続き機能し続ける場合のことです。
致命的なエラーの例:
- ロギングデバイスのディスク容量が不足しているため、ロギングを続ける必要があります。
- クライアントアプリケーションでのネットワーク接続の完全な損失。
- デフォルトを使用できない場合、構成情報がありません。
致命的ではないエラーには次のものが含まれます。
- 何らかの理由で1つのセッションが失敗したが、他のクライアントに引き続きサービスを提供できるサーバー。
- 新しいセッションを確立できる場合、セッションの消失などの断続的なエラー。
- デフォルト値を使用できる場合、構成情報がありません。
他のヒント
何かが欠落しているか、アプリケーションが単に続行できない状況が発生した場合、エラーは致命的です。可能な例は、必要なconfig.fileがないか、例外が「バブルアップ」し、未処理の例外ハンドラーによってキャッチされた場合です
次のステップがアプリケーションの終了である場合、または以降の作業を行わない場合は致命的です。アプリケーションがバッチの一部である場合、または複数のプロセスが実行されている場合、これは何が起こったかを追跡するのに役立ちます。
回復の可能性がある場合(たとえば、しばらくの間再試行でネットワーク接続が失われた場合)、致命的なエラーは使用しません。
メインスレッドによってアクティブ化された複数のサービススレッドがあり、入力の一部が原因でそのうちの1つが失敗しても、アプリケーションが新しいリクエストを処理できる場合、それは致命的とは見なされません。
この回答を短く簡潔にするには、アプリケーションがクラッシュした場合、致命的だと考えます。データベースや必要なサービスなどの重要なリソースに接続できない場合、致命的です。全体として、アプリケーションの正常な実行を妨げ、ユーザーに影響を与える場合、致命的なエラーとして分類すると言います。
ただし、エラーを分類する最も重要な方法は、 C ++コーディング標準:
"実用的で一貫性のある合理的なエラー処理ポリシーを設計の初期段階で開発し、それに従ってください。"