6

私は、例外処理をイベント ログとデータベースのテーブルに実装した店舗で働いてきました。

それぞれにメリットがありますが、私の経験に基づいていくつかを強調できます。

イベントログ

  • 例外のための業界標準の場所 (+)
  • ロギングの容易さ (+)
  • ここにデータベース接続の問題を記録できます (+)
  • イベント ログの上にレポートおよび表示アプリを構築できます (+)
  • そこにたくさん報告されている場合は、時々フラッシュする必要があります (-)
  • SQL ロギングほど拡張性がない [SQL のメソッド名などのカスタム フィールドを追加する] (-)

SQL/データベース

  • 大量のデータを扱える (+)
  • 例外の急速なボリューム挿入を処理できます (+)
  • 負荷分散環境での例外用の単一の保管場所 (+)
  • 非常にカスタマイズ可能 (+)
  • SQL ストレージからレポート/通知を作成するのが少し簡単 (+)
  • 一般的な例外が格納される場所とは異なります (-)

重要な考慮事項がありませんか?

これらのポイントのいくつかは議論の余地があると確信していますが、他のチームにとって何が最も効果的だったのか、そしてなぜあなたがその選択について強く感じているのか興味があります.

4

4 に答える 4

4

ロギングとトレースを区別する必要があります。行は少しあいまいですが、私はロギングを「開発者以外のもの」と考える傾向があります。未処理の例外、破損したファイルなど。これらは間違いなく正常ではなく、非常にまれな問題であるはずです。

トレースは、開発者が関心を持っているものです。スタックトレース、メソッドパラメータ、Webサーバーが401.3のHTTPステータスを返したことなど。これらは非常にノイズが多く、短時間で大量のデータを生成できます。通常、ノイズを削減するために、さまざまなレベルのトレースがあります。

クライアントアプリにログインするには、イベントログを使用する方法だと思います(再確認する必要がありますが、ASP.NET Health Monitoringでもイベントログに書き込むことができると思います)。通常のユーザーには、セットアップ(とにかく管理者によってインストールされます)がイベントソースを作成している限り、イベントログに書き込む権限があります。

SQLロギングの利点のほとんどは、本当ですが、イベントロギングには適用できません。

  • 大量のデータを処理できます: 処理されていない例外やその他の高レベルの障害が本当に大量にありますか?
  • 例外の急速なボリューム挿入を処理できます:単一の未処理の例外はアプリをダウンさせる必要があります-それは本質的にレート制限されています。開発者以外の人にとって他の興味深いイベントも同様に集約する必要があります。
  • 非常にカスタマイズ可能:イベントログのメッセージはほとんどフリーテキストです。さらに情報が必要な場合は、テキスト、構造化XML、またはバイナリファイルログを指定するだけです。
  • SQLストレージからレポート/通知を作成するのが少し簡単:レポートはイベントログビューアに組み込まれており、通知システムは、アプリケーションのクラッシュが原因で固有のものであるか、他の非常に重要な通知と混合されているため、言い訳はほとんどありません。イベントログメッセージがありません。企業またはその他のネットワーク化されたアプリの場合、エラーのイベントログからすでにカリングされている1,000と1の異なるアプリがあります...システム管理者がすでに1つを使用している可能性があります。

例外やエラーの特定の詳細が含まれているトレースについては、フラットファイルが好きです。フラットファイルは、保守が簡単で、grepが簡単で、必要に応じてSQLにインポートして分析できます。

90%の場合、それらは必要なく、WARNまたはERRORに設定されています。ただし、それらをINFOまたはDEBUGに設定すると、大量のデータが生成されます。RDBMSには、パフォーマンス(ACID、同時実行性など)、ストレージ(トランザクションログ、SCSI RAID-5ドライブなど)、および管理(バックアップ、サーバーメンテナンスなど)など、多くのオーバーヘッドがあります。トレースログには不要です。

于 2008-10-26T21:21:12.360 に答える
3

データベースに直接ログインしません。あなたが言うように、データベースの問題はログに記録するのが難しくなります:)

ファイルシステムにログを記録し、ファイルからデータベースに一括挿入するジョブを作成します。個人的には、主にスケーリングの状況で、データベース内のログをログ実行するのが好きです。複数のマシンを実行することをほぼ想定しています。ログを効果的に結合できると便利です。(もちろん、各エントリには、それが由来するマシンを記載する必要があります。)

アプリのレポートと表示は、データベースから非常に簡単に実行できます。現時点では、ログに特化したレポート ツールは少ないかもしれませんが、ほぼすべてのデータベースに一般化されたレポート機能があります。

ロギングを容易にするために、log4netのようなフレームワークを使用します。これは、多くの労力を必要とせず、試行錯誤されたソリューションです。それ以外は、コードを変更せずに出力戦略を変更できることを意味します。必要に応じて、イベント ログとデータベースの両方にログを記録したり、一部のログを 1 つの場所に送信したり、別の場所に送信したりすることもできます。(ここでは .NET を想定していますが、多くのプラットフォームには同様のログ フレームワークがあります。)

于 2008-10-26T20:51:12.407 に答える
2

イベント ログについて考慮する必要があることの 1 つは、サーバーのイベント ログ (Microsoft Operations Manager など) を監視し、インテリジェントに通知を行い、その内容に関する統計を収集できる製品があることです。

SQL ベースのロギングの「欠点」は、アプリケーションに依存関係の別のレイヤーが追加されることです。これは、常に受け入れられる場合とそうでない場合があります。私は自分のキャリアの中で両方を行ってきました。MSMQ ベースのメッセージ キューを使用してログ イベントをキューに入れ、そのキューを MSSQL データベースに空にして、クライアント ソフトウェアが DB に接続する必要がないようにしたことも 1 度か 2 度ありました。

于 2008-10-26T20:48:50.227 に答える
1

イベント ログへの書き込みに関する 1 つの注意事項: アプリケーション ユーザーに特定のアクセス許可が必要であり、一部の環境では既定で制限されている場合があります。

私がいるところでは、バックアップとしてフラット ファイルを使用して、ほとんどのログをデータベースに記録しています。これは非常に便利です。たとえば、アプリの RSS フィードを取得して、変更を加えたときに数日間監視することができます。

于 2008-10-26T20:47:18.607 に答える