1

わかりましたので、開発グループへの影響を最小限に抑えて解決したい状況に遭遇しました。

大規模な c# システム (最大 40 の製品アセンブリ) でログ フレームワークとして log4net を使用しています。

現在、サポート側は、ログに記録されたイベントを、個別に維持しているデータベースと関連付けることができるようにしたいと考えています。合理的な要求。

本番環境では、メインのログ リポジトリは Windows イベント ログです。


開発者側では、現在のパターンは次のとおりです。

コンポーネントからログを記録したいときはいつでも、クラスの先頭で次のようにロガーをインスタンス化します。

private static readonly ILogger Log = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod())

ロギングコンテキストに何かが必要な場合は、すべてのスレッドのフローでできるだけ早くそれを配置します。サービスコールなどの受信側

ログを記録したいときはいつでも、単純に Log.Warn(str, ex) - (または Info、Error など) を実行します。


ここで、このログ エントリを一意の「eventId」に「修正」したいと考えています。ILogger に拡張メソッドを指定すると、次のことが可能になります。 Log.Warn(int, str, ex), when "int"次のプロパティを持つ数値です。

  • 永続ストアに「マッピング」されます。
  • 1 つのログ エントリのみを指します。
  • ソース コードのログ ステートメントが削除された場合、ID は新しいログ ステートメントに再利用されません。

私の当面の解決策は、可能な「eventId」のセットをカバーし、開発者に「それらを一度だけ使用する」ように指示するグローバルな列挙型を維持することです。

次に、ネームスペースと「CategoryId」の間である種の「インテリジェント」マッピングを実行します。たとえば、「BusinessLayer」ネームスペース内のすべてのものに 1 つの categoryId が割り当てられます。

でも、何か足りない気がする……。

以下についてご意見をお寄せください:

  • 大規模なシステムで EventId と CategoryId をどのように使用しますか? (または「何」に使用しますか)
  • 開発者がコードステートメントレベルで一意の ID を提供する必要がない、ロギングへの単純なアプローチを維持できるような方法で、EventId を作成する「動的」な方法の例を持っている人はいますか。

私の質問が広すぎる場合は申し訳ありませんが、私はここで少し釣りをしていることを認識しています.

4

0 に答える 0