多くの類似の質問は、SOにここにあります
よく使用されるいくつかのロギングフレームワークがありませんでした。
ロギング抽象化を:ここでは一般的に使用されるフレームワークのリストは、あなたが記載されているそのうちのいくつかは、ある
システム。診断アドオン:
その他
彼言及した私が見たことのCodePlexから他のロギングフレームワークのカップル( )SOの再:
なぜあなたは他の上で1つを選ぶのでしょうか?それは厳しいものです。それの多くは個人的な好みです。その中には、技術的(または機能的)な優位性のものがあります。
ロギングフレームワーク(特に第三者のフレームワーク)の明らかな欠点の1つは、サポートの質です。 log4net、NLog、Common.Loggingなどの問題がある場合はどうなりますか?それらのフレームワークの開発者から修正を受けることができますか?これらのフレームワークでソースコードが利用できるので、これは非常に重要ではないかもしれません。しかし、ソースツリーを "継承"するのではなく、修正を加えたり、機能強化を追加したりすることをお勧めします。私は、フレームワークが拡張性があり、通常の拡張ポイントを介して多くの拡張機能を追加できると言っています。
上記のリンクを読めば、好意的な言説だけに基づいて、log4netが明確な「勝者」になると言えると思います。これは歴史的なロギングのお気に入りとして、また多くの人々が今後どのように使用するかについて頻繁に言及されます。
NLogは支持者を持っていますが、log4netは非常によく似ていますが、普及率が高いとは言えません。 NLogの機能はlog4netと非常によく似ており、最近、重要な開発サイクルを経てきたという追加の利点があります。
エンタープライズライブラリは、多くの場合、良い選択肢として宣伝されていますが、多くの場合、ひどい選択肢として宣伝されています。おそらく、そのネガティブな評判の一部は、あまり良い初期のバージョンではないでしょうか?多分それは今より良いですか?
System.Diagnosticsは、多くの場合、少なくとも3つの利点があります。サードパーティの依存性はなく、多くのMicrosoftコンポーネントにSystem.Diagnosticsが装備されています。これは簡単に拡張可能です(おそらく、 log4netやNLogのようなフレームワークでは "無料で"?) System.Diagnosticsを使用している場合は、Trace.WriteLine/Debug.WriteLineではなくTraceSourceオブジェクトを使用することがコンセンサスになると思います。
System.DiagnosticsとWCFがうまく機能することにも注意してください。 WCFメッセージトラフィックはSystem.Diagnosticsで記録することができ、WCFはWCFサービス境界呼び出し全体でSystem.Diagnosticsアクティビティ情報(System.Diagnostics.CorrelationManager.ActivityId)も伝播します。
私は、log4netが最も好意的な状態を維持し続けるべきであるとは確信していません。 As has been noted elsewhere here on SO, log4net does not seem to be undergoing a lot of development recently(2011年7月17日のNLog 2.0 was released)2011年第1四半期に予定されている最終リリースでNLog 2.0がベータ版でリリースされている間、「log4netが死んでいる」と思われます。これによりNLogはlog4netより明らかに優れた選択肢になりますか?私は知らないが、少なくともLog4netの開発がより多くの人生の兆候を示すまで、NLogは少なくとも2つの間で選択する際には少なくとも同等の配慮を受け、おそらく新しい開発のために推薦されるお気に入りであるべきだと思う。
log4netのとNLogは両方とも非常に柔軟な設定オプションを提供します。これらは、ロギングステートメントの定義(タイプごとにロガーを定義する「標準的な」パターン)によって、きめ細かな粒度を持つことができます。また、独自の「ロギング先」オブジェクト(log4net AppendersとNLogターゲット)と「フォーマット」オブジェクト(log4netパターンコンバータとNLog LayoutRenderers)を開発できるようにすることで、ライブラリを簡単に拡張できます。別にロギングフレームワークの選択、抽象化レイヤーを使用することにより、特定のロギングフレームワークに強い依存関係からアプリケーションコードを絶縁するためのいくつかの(多く?)の提唱者から
。これは、おそらく既存のフレームワークの上に実装する独自のILoggerインターフェースの形を取ることができます。将来、ILoggerを別のフレームワークで実装することで、フレームワークを変更することができます。または、DI/IoCを使用してコードに "ILogger"を注入することもできます。多くのDI/IoCフレームワークには、log4net、NLog、またはEnterprise Libraryを使用するように設定できるILogger抽象化機能が組み込まれています。また、独自のILogger実装を記述して注入することもできます。実装は何を気にしていますか?特定のロギングフレームワークに強く依存することからコードを保護する別の方法は、Common.LoggingやSLFなどの既存のロギング抽象化フレームワークの使用です。利点は、アプリケーションが特定のログフレームワークに依存していないことです。しかし、あるものは、別の(ロギング抽象化フレームワークの)依存関係(ロギングフレームワーク上での)の1つだけを交換したという人もいます。ログの抽象化について
つ以上のノート:
良いログの抽象化を使用すると、同じ出力ファイルに異なるログフレームワークからの出力をキャプチャできるようにする必要があります。 Common.Loggingはこれを "ブリッジング"と呼びます。あなたがNLogに裏打ちされたCommon.Loggingを使ってアプリを書いたとします。ここで、log4netを使って直接書かれたサードパーティのクラスライブラリを使用しているとします。ブリッジシステムでは、log4netの出力を(カスタムアペンダを介して)キャプチャし、Common.Loggingを介して再ルーティングして、サードパーティのクラスライブラリのログ出力をアプリケーションのログ出力のコンテキストで表示できるようにします。ログの抽象化を使用して
はまた、あなたが開発中のフレームワークをログに記録する「テストドライブ」することができます。あなたはlog4netがそのような方法だと思うかもしれませんが、あなたはNLogを試してみることを望んでいます。ロギング抽象化を使用すると、2つの間で切り替えるのは比較的簡単です。結局のところ、どのロギングフレームワークを選択することができますが、その間に特定のロギングフレームワークに依存しない山のコードを書くことができました。
別のフレームワークよりも1つのフレームワークを選択する別の理由は、作業環境です。すでにエンタープライズライブラリの一部を使用している場合は、エンタープライズライブラリのロギングを使用するだけで十分です。
Silverlightで開発している場合はどうなりますか? Clog - part of Calciumのようなものを使用することもできます。 SilverlightとWP7互換のNLog 2.0を使用することもできます。
たSystem.Diagnosticsアドオン(Ukadc.Diagnostics、Essential.Diagnostics)。これらは、それ自体ログフレームワークではありません。むしろ、既存のSystem.Diagnosticsフレームワークで使用できる有用なオブジェクトと拡張ポイントのコレクションを表します。私の意見では、log4netとNLogでどのように書式を設定するかのように、ロギング出力を書式設定する機能が、これらのアドオンのそれぞれに追加されていることが最も良い点の1つです。Essential.Diagnosticsは使用していませんが、Ukadc.Diagnosticsを試してみて、本当にクールだと思います。独自の「書式設定トークン」を書くことも簡単です。
これは完全にあなたの質問に答えるかどうか分かりませんが(それはかなり広いですが)、私は思考のためにたくさんの食べ物があると思います。
+1百万、経験と幅広い知識から来ているようです。 – LamonteCristo
私はこの質問をここで何百回も尋ねられているので、この質問を閉じることに投票したかったのです。しかし、あなたの答えは非常に良いです。それは本当にここで既に与えられた答えに価値を付加します。そのため、投票は終了しませんが、あなたのために+1してください。 – Steven
@スティーブン - 親切な言葉をありがとう! – wageoghe