web-dev-qa-db-ja.com

log4netとNlog

両方の経験がありますか?彼らはどのように互いに積み重なっていますか?

エンタープライズアプリケーションへのログインにそれらの1つを使用することを計画しています。

参照:

log4net

nlog

編集:nlogまたはlog4netのいずれにも既存の依存関係はありません。

356
Greg Dean

私は最近、次のプロジェクトのために「いくつかのログをプロトタイプ化する」ことを任されました。ロギングフレームワークの経験はありませんでした。数日間、Log4Net、NLog、Enterprise Libraryで調査し、チュートリアルを実行し、おもちゃのアプリを作成しました。 3〜4週間後に戻ってきて、それらをまとまりのあるデモにまとめました。願わくば、これのいくつかがあなたにとって役に立つことを願っています。

私のプロジェクトに対する私の推奨事項は次のとおりです。

  1. 直接の依存関係を回避するには、ロギングファサード(例 Common.LoggingSimpleLoggingFacade )を使用します。
  2. エンタープライズライブラリを他の施設に使用することになった場合は、ロギングにも使用します。
  3. Log4Netに依存するものを使用することになった場合は、Log4Netを使用してください。
  4. 上記のいずれでもない場合は、NLogを使用します。どちらがいいですか。

それはこれらの発見に基づいています(意見!):

  • 3つのフレームワークはすべて能力があり、いくつかの洗練されたことができます。高品質のソリューションが必要ですが、率直に言って、超高性能や60種類のイベントシンクは必要ありません。
  • 3つすべてに非常に類似した基本概念があります。
  • それぞれに、高度なルーティング、動的ログファイル名、ファイルの切り捨てなど、独自のクールなトリックがあります。
  • 3つすべては、独自の方法で十分に文書化されています。
  • 私のような完全な初心者にとって、彼らは最初は少し厄介でした。ここでは基本的な点で大きな違いはありません。乗り越えました。
  • 数週間後に物事を再訪するとき、NLogは明らかに最も簡単に再開できました。私はそれに少しだけブラシをかける必要がありました。 Log4Netを使用するには、オンラインの例をいくつか確認しなければなりませんでした。 EntLibを使用して、私はあきらめ、最初からチュートリアルをやり直しました-私は完全に失われました。
  • EntLibにデータベースへのログ記録などの処理を実行させる方法がわかりませんでした。簡単かもしれませんが、制限時間を超えていました。
  • Log4NetとNLogのコード内フットプリントはわずかです。 EntLibはスパムですが、とにかくファサードを使用します。
  • 誤ってEntLibを誤って設定したため、実行時に通知されました。 Log4Netはしませんでした。 NLogを誤って設定することはありませんでした。
  • EntLibには、見栄えの良いapp.configエディターが付属しており、100%必要です。 NLogには設定ファイルスキーマがあるため、「intellisense」を取得できます。 Log4Netにはnadaが付属しています。

それで、明らかに私はこれまでのところNLogが好きです。ただし、別のソリューションを使用できるにもかかわらず、使用するには十分ではありません。

383
Matt

あまり議論されていない重要な考慮事項は、サポートと更新です。

Log4Netは、バージョン1.2.10が2006年4月19日に公開されてから更新されていません

対照的に、2006年にNLogは積極的にサポートされています log4netが最後に更新されたときに存在しなかった多くのプラットフォームをサポートするNLog 2.0 など:

  • NET Framework 2.0 SP1以降、3.5および4.0(クライアントおよび拡張プロファイル)
  • Silverlight 2.0、3.0、4.0
  • .NET Compact Framework 2.0、3.5
  • Mono 2.xプロファイル
159
Jay Cincotta

最近、両方のフレームワークで経験したことがあるので、各フレームワークについて自分の意見を共有できると思いました。

既存のWebアプリケーションのロギングフレームワークを評価するように求められ、さまざまなオンラインフォーラムを通過した後、選択をNLog(v2.0)およびlog4net(v1.2.11)に絞り込みました。私の発見は次のとおりです。

  1. NLogの設定/起動は非常に簡単です。あなたは彼らのウェブサイトの入門チュートリアルを通過し、完了です。 nlogでどのようなことが起こるのか、公正なアイデアが得られます。構成ファイルは非常に直感的であるため、誰でも構成を理解できます。たとえば、内部ログオンを設定する場合は、Nlog構成ファイルのヘッダーノードでフラグを設定します。これは、予想される場所です。 log4netでは、web.configのappSettingsセクションで異なるフラグを設定します。

  2. Log4netでは、内部ロギングはタイムスタンプを出力せず、迷惑です。 Nlogでは、タイムスタンプ付きのNiceログを取得します。私の評価では非常に便利だと感じました。

  3. Log4netのフィルター-この質問をよく確認してください- log4netフィルター-ログメッセージを無視するANDフィルターの書き方 そして、これに対する答え/解決策を見つけたら、私に知らせてください。独自のカスタムフィルタを作成できるため、この質問には回避策があります。しかし、log4netで簡単に入手できないもの。

  4. パフォーマンス-ストアドプロシージャを使用して、約3000のログメッセージをデータベースに記録しました。シンプルなforループ(int i = 0; i <3000; i ++ ...を使用して、同じメッセージを3000回ログに記録しました。

  5. Log4netは非同期アペンダーをサポートしていません。

ロギングフレームワークとしてNLogを選択するのは十分な比較でした。 :)

97
Narayan Akhade

このスレッドに遅れて到達した場合は、.Net Base Class Library(BCL)を振り返ってみてください。 TraceSourceクラスが導入されたとき(2005年頃)、多くの人々が.Net 1.1と.Net 2.0の間の変更を見逃していました。

TraceSourceの使用は、エンタープライズアプリケーションブロックのオーバーヘッドなしで、ロギングの詳細な制御、app.config/web.configでの構成、およびプログラムによるアクセスを備えた他のロギングフレームワークに類似しています。

また、「log4net vs TraceSource」というさまざまな比較があります。

36
Jeremy

私たちにとって重要な違いは、全体的なパフォーマンスにあります...

NLog対Log4NetのLogger.IsDebugEnabledを見てください。テストから、NLogのオーバーヘッドは小さく、それが私たちの目標です(低遅延のもの)。

乾杯、フロリアン

34
Florian Doyon

最初にスタックの残りを見てください。

NHibernateを使用している場合、Log4Netを直接利用します。他のフレームワークには、他の特定のロガーが必要な場合があります。

それ以外:両方ともうまくいきます。

私は自分でLog4Netに決めました。構成するのは苦痛かもしれませんし、正しく構成されていなければ、何が悪かったのかを理解するのが苦痛です。ただし、ロガーに必要なことはほとんど何でもできます。

Log4Netに永続的な問題がない場合、それを始める方法について書いた記事を以下に示します。 http://elegantcode.com/2007/12/07/getting-started-with- log4net /

25
Chris Brandsma

さて..データベースのロギングタスクにエンタープライズライブラリを使用しましたが、パフォーマンスのボトルネックによりNLogに切り替えました。

いくつかの比較情報:

http://pauliusraila.blogspot.com/2010/10/solving-database-logging-bottlenecks.html

17
Joe

上記をエコーし​​、nLogを好みます。 Entlibは不必要に肥大化しています。

Re:Log4net log4netで常に得られることの1つは、コンポーネントを初期化するためにglobal.asaxに以下を追加するのを忘れることです。

log4net.Config.XmlConfigurator.Configure();
15

here に進むと、NLogとLog4Netの両方のライブラリと、Enterprise Libおよびその他の製品を含む包括的なマトリックスを見つけることができます。

マトリックスは、マトリックスに存在する唯一の商用ライブラリの機能に下線を引く方法で行われていると主張することができます。私はそれが本当だと思うが、とにかく私の選択をNLogに対して駆り立てることは有用だった。

よろしく

13
Lorenzo

気づいたように、log4netはアプリケーションが実行されている間ずっと出力ファイルをロックするため、それらを削除することはできません。それ以外は似ています。

だから私はNLogを好みます。

9

私が実行するオープンソースプロジェクトの恥知らずなプラグインですが、どの.NETロギングフレームワークがよりアクティブであるかについての活発な議論を考えると、 Serilog への必須リンクを投稿すると思いました。

アプリケーション内で使用するために、Serilogはlog4netに似ています(そしてその上に大きく描画します)。ただし、他の.NETログオプションとは異なり、Serilogはオフライン分析のためにログイベントの構造を保持することを目的としています。あなたが書くとき:

Log.Information("The answer is {Answer}", 42);

ほとんどのロギングライブラリは、メッセージをすぐに文字列にレンダリングします。 Serilogもこれを行うことができますが、{ Answer: 42 }プロパティを保持するため、後で多くのNoSQLデータストアの1つを使用して、Answerの値に基づいてイベントを適切にクエリできます。

私たちは1.0に近づいており、すべての最新(.NET 4.5、Windowsストア、およびWindows Phone 8)プラットフォームをサポートしています。

9

NLogもアンマネージコードで動作するため、2番目になります。 log4netとlog4cxxを一緒に使用することも考えられますが、NLogはすぐにマネージコードとアンマネージコードの両方を処理します。

また、ロギングAPIを抽象化するファサードである Common.Logging を見ました。log4net、NLog、およびEntreprise Libraryをサポートしています。私はそれを使用するつもりはありませんが、ロギングが無効になっているときのパフォーマンスを改善するためにラムダを使用する方法が好きです(NLogとおそらく他のものと共有される機能)。

8
eddycharly

Microsoft Enterprise Library Logging Block を検討することもできます。ニースのデザイナーが付属しています。

4
Rashack

一般的なコンセンサスは、nlogの構成と使用が少し簡単だと思います。ただし、どちらも非常に優れています。

2
tsimon

私の経験に基づいて、 SmartInspect はNLogとlog4netの両方に勝っています。

非常に使いやすく、ドキュメントが優れており、以前にログに記録されたメッセージをインタラクティブログビューアーで表示およびフィルター処理できます。これは、現実世界での大きな利点です。

私が気に入っていることの1つは、Chromeのブラウザータブのようなデータのタブビューです。各タブは、ログの異なるフィルタービューを提供できます。

0
Contango