両方の経験がありますか?彼らはどのように互いに積み重なっていますか?
エンタープライズアプリケーションへのログインにそれらの1つを使用することを計画しています。
参照:
編集:nlogまたはlog4netのいずれにも既存の依存関係はありません。
私は最近、次のプロジェクトのために「いくつかのログをプロトタイプ化する」ことを任されました。ロギングフレームワークの経験はありませんでした。数日間、Log4Net、NLog、Enterprise Libraryで調査し、チュートリアルを実行し、おもちゃのアプリを作成しました。 3〜4週間後に戻ってきて、それらをまとまりのあるデモにまとめました。願わくば、これのいくつかがあなたにとって役に立つことを願っています。
私のプロジェクトに対する私の推奨事項は次のとおりです。
それはこれらの発見に基づいています(意見!):
それで、明らかに私はこれまでのところNLogが好きです。ただし、別のソリューションを使用できるにもかかわらず、使用するには十分ではありません。
あまり議論されていない重要な考慮事項は、サポートと更新です。
Log4Netは、バージョン1.2.10が2006年4月19日に公開されてから更新されていません 。
対照的に、2006年にNLogは積極的にサポートされています log4netが最後に更新されたときに存在しなかった多くのプラットフォームをサポートするNLog 2.0 など:
最近、両方のフレームワークで経験したことがあるので、各フレームワークについて自分の意見を共有できると思いました。
既存のWebアプリケーションのロギングフレームワークを評価するように求められ、さまざまなオンラインフォーラムを通過した後、選択をNLog(v2.0)およびlog4net(v1.2.11)に絞り込みました。私の発見は次のとおりです。
NLogの設定/起動は非常に簡単です。あなたは彼らのウェブサイトの入門チュートリアルを通過し、完了です。 nlogでどのようなことが起こるのか、公正なアイデアが得られます。構成ファイルは非常に直感的であるため、誰でも構成を理解できます。たとえば、内部ログオンを設定する場合は、Nlog構成ファイルのヘッダーノードでフラグを設定します。これは、予想される場所です。 log4netでは、web.configのappSettingsセクションで異なるフラグを設定します。
Log4netでは、内部ロギングはタイムスタンプを出力せず、迷惑です。 Nlogでは、タイムスタンプ付きのNiceログを取得します。私の評価では非常に便利だと感じました。
Log4netのフィルター-この質問をよく確認してください- log4netフィルター-ログメッセージを無視するANDフィルターの書き方 そして、これに対する答え/解決策を見つけたら、私に知らせてください。独自のカスタムフィルタを作成できるため、この質問には回避策があります。しかし、log4netで簡単に入手できないもの。
パフォーマンス-ストアドプロシージャを使用して、約3000のログメッセージをデータベースに記録しました。シンプルなforループ(int i = 0; i <3000; i ++ ...を使用して、同じメッセージを3000回ログに記録しました。
Log4netは非同期アペンダーをサポートしていません。
ロギングフレームワークとしてNLogを選択するのは十分な比較でした。 :)
このスレッドに遅れて到達した場合は、.Net Base Class Library(BCL)を振り返ってみてください。 TraceSourceクラスが導入されたとき(2005年頃)、多くの人々が.Net 1.1と.Net 2.0の間の変更を見逃していました。
TraceSourceの使用は、エンタープライズアプリケーションブロックのオーバーヘッドなしで、ロギングの詳細な制御、app.config/web.configでの構成、およびプログラムによるアクセスを備えた他のロギングフレームワークに類似しています。
また、「log4net vs TraceSource」というさまざまな比較があります。
私たちにとって重要な違いは、全体的なパフォーマンスにあります...
NLog対Log4NetのLogger.IsDebugEnabled
を見てください。テストから、NLogのオーバーヘッドは小さく、それが私たちの目標です(低遅延のもの)。
乾杯、フロリアン
最初にスタックの残りを見てください。
NHibernateを使用している場合、Log4Netを直接利用します。他のフレームワークには、他の特定のロガーが必要な場合があります。
それ以外:両方ともうまくいきます。
私は自分でLog4Netに決めました。構成するのは苦痛かもしれませんし、正しく構成されていなければ、何が悪かったのかを理解するのが苦痛です。ただし、ロガーに必要なことはほとんど何でもできます。
Log4Netに永続的な問題がない場合、それを始める方法について書いた記事を以下に示します。 http://elegantcode.com/2007/12/07/getting-started-with- log4net /
さて..データベースのロギングタスクにエンタープライズライブラリを使用しましたが、パフォーマンスのボトルネックによりNLogに切り替えました。
いくつかの比較情報:
http://pauliusraila.blogspot.com/2010/10/solving-database-logging-bottlenecks.html
上記をエコーし、nLogを好みます。 Entlibは不必要に肥大化しています。
Re:Log4net log4netで常に得られることの1つは、コンポーネントを初期化するためにglobal.asaxに以下を追加するのを忘れることです。
log4net.Config.XmlConfigurator.Configure();
here に進むと、NLogとLog4Netの両方のライブラリと、Enterprise Libおよびその他の製品を含む包括的なマトリックスを見つけることができます。
マトリックスは、マトリックスに存在する唯一の商用ライブラリの機能に下線を引く方法で行われていると主張することができます。私はそれが本当だと思うが、とにかく私の選択をNLogに対して駆り立てることは有用だった。
よろしく
気づいたように、log4netはアプリケーションが実行されている間ずっと出力ファイルをロックするため、それらを削除することはできません。それ以外は似ています。
だから私はNLogを好みます。
私が実行するオープンソースプロジェクトの恥知らずなプラグインですが、どの.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)プラットフォームをサポートしています。
NLogもアンマネージコードで動作するため、2番目になります。 log4netとlog4cxxを一緒に使用することも考えられますが、NLogはすぐにマネージコードとアンマネージコードの両方を処理します。
また、ロギングAPIを抽象化するファサードである Common.Logging を見ました。log4net、NLog、およびEntreprise Libraryをサポートしています。私はそれを使用するつもりはありませんが、ロギングが無効になっているときのパフォーマンスを改善するためにラムダを使用する方法が好きです(NLogとおそらく他のものと共有される機能)。
Microsoft Enterprise Library Logging Block を検討することもできます。ニースのデザイナーが付属しています。
一般的なコンセンサスは、nlogの構成と使用が少し簡単だと思います。ただし、どちらも非常に優れています。
私の経験に基づいて、 SmartInspect はNLogとlog4netの両方に勝っています。
非常に使いやすく、ドキュメントが優れており、以前にログに記録されたメッセージをインタラクティブログビューアーで表示およびフィルター処理できます。これは、現実世界での大きな利点です。
私が気に入っていることの1つは、Chromeのブラウザータブのようなデータのタブビューです。各タブは、ログの異なるフィルタービューを提供できます。