[.net] log4netとTraceSource


Answers

非常に初期の(.NET 1.0).NET Frameworkのトレースはかなり制限されていました。

たとえば、TraceSourceのパーティション分割は.NET 2.0までではなく、4つのレベル(Error、Warning、Information、Verbose)しか持っていませんでしたが、必要に応じて半数のブールスイッチを使用することができました。

log4jはJavaで広く普及しているので、.NETポートのサポートが豊富になり、人々が適切に使用することさえしなくても(例えばシングルトンのロガーでラッピングし、それは主な機能です)。

それでも、log4netや他のフレームワーク(NLog、Common.Logging、さらにはEntLibなど)は、独自のログシステムを最初から実装する方法、つまり最初にログステートメントを書く方法を変更することによって間違った方向に進んだと思います。

特に.NET 2.0以来、.NETに既にあるものの強固な基盤を拡張するために、私は努力することを望んでいました。 既に存在するものを拡張するプロジェクトの場合は、CodePlexのEssential Diagnosticsプロジェクト( http://essentialdiagnostics.codeplex.com/ )をご覧http://essentialdiagnostics.codeplex.com/

log4netの強み:

  • 混合環境を実行し、一貫したロギングが必要な場合は、log4jに似ています。

  • 設定を継承する自動ロガー階層は、実装するトレースソースの数に比べて非常にきれいで、それぞれを構成する必要があります。 (おそらく、場合によっては過度の犠牲になるかもしれない)。

  • log4netはすでに28のアペンダー(トレースリスナーに相当)を持っていますが、System.Diagnosticsは10しか持っていませんが(詳細についてはEssential.Diagnosticsプロジェクトを参照してください)、RemoteSyslogAppender、NetSendAppender、AnsiColorTerminalAppenderまたはTelnetAppenderが必要な場合は、あなたは運がいいです。

欠点(System.Diagnosticsと比較して):

  • 別のロギング構文を使用する必要があるので、既にsource.TraceEvent()を使用している場合は、すべてを調べてすべてを置換する必要があります。

  • これは相関の構文も異なりますので、CorrelationManagerからlog4netコンテキストに変更する必要があります。

  • フレームワークトレース(WCFなど)と簡単に統合できません。

  • イベントIDのサポートが不十分です(別の拡張プロジェクトIEventLogを使用する必要があります)。

  • Windows(Vista)のイベントトレース、またはService Trace ViewerのXML形式をまだサポートしていません。

Question

このスレッドでは、多くの人がlog4netを使用していることを示しています。 私はTraceSourcesのファンであり、なぜlog4netが使用されているのか知りたいです。

ここで私はトレースソースが好きです:

  • プラグ可能なリスナー - XML、TextFile、Console、EventLog、独自のロール
  • カスタマイズ可能なトレーススイッチ(エラー、警告、情報、冗長、開始、終了、カスタム)
  • カスタマイズ可能な設定
  • ロギングアプリケーションブロックは、TraceListenersの大きなセットです
  • アクティビティ/スコープの相関(たとえば、ASP.NETリクエスト内のすべてのログを特定の顧客に関連付ける
  • サービストレースビューアでは、これらのアクティビティに対するイベントを個別に視覚化できます
  • そのすべてはapp.config / web.configで設定できます。

.NETフレームワークは内部的にTraceSourcesを使用しているため、トレースを構成する一貫した方法も得られます.log4netではlog4netとTraceSourcesを構成する必要があります。

log4netは、TraceSourcesが何もしていない(またはカスタムTraceListenersを書くことでできなかった)のですか?




私がLog4Netを使用してLog4Netを使ってTracingを使用する理由は、アプリケーション(データアクセス、サービス、ビジネスロジックなど)とサブシステム(認証、処理など)それぞれのサブシステムのロギングを個別にオフにします。

この柔軟性により、システム全体のFirehoseをオンにすることなく、1つのサブシステムの詳細なログ記録を設定することができます。

Traceクラス(TraceInformation()など)で提供される静的メソッドは、どのロギングサブシステムを指定するかを指定する方法を提供しないため、独自のTraceListenerを作成することによって簡単に提供されるものではありません。

もう1つの理由はパフォーマンスです。アプリケーションに1秒間に数千のメッセージが記録される可能性があります。 Log4Netは低いオーバーヘッドを課します。 対照的に、私が最後に見たところでは、Logging Applicationブロックはログに記録されたすべてのメッセージについてXML構成を再解析し、ブロックを非常に重く低速にしました。




Links