両方経験した人いますか?それらはどのように互いに積み重なっていますか?
そのうちの 1 つをエンタープライズ アプリケーションへのログインに使用する予定です。
参考文献:
編集: nlog または log4net への既存の依存関係はありません。
私は最近、次のプロジェクトのために「いくつかのlogginのプロトタイプを作成する」という任務を負いました。ロギングフレームワークの経験はありませんでした。Log4Net、NLog、Enterprise Libraryで数日間、調査、チュートリアルの実行、おもちゃのアプリの作成などを行いました。3〜4週間後に戻ってきて、それらをまとめてまとまりのあるデモにしました。うまくいけば、これのいくつかはあなたに役立つでしょう。
私たちのプロジェクトに対する私の推奨事項は次のとおりです。
これは、これらの調査結果(意見!)に基づいています。
だから明らかに私はこれまでのところNLogが好きです。ただし、別のソリューションが利用可能であるにもかかわらず、それを使用するには十分ではありません。
あまり議論されていない重要な考慮事項は、サポートと更新です。
2006 年 4 月 19 日にバージョン 1.2.10 が公開されて以来、Log4Net は更新されていません。
対照的に、NLog は 2006 年から積極的にサポートされており、log4net が最後に更新されたときには存在しなかった多くのプラットフォームをサポートする NLog 2.0が間もなくリリースされます。
最近、両方のフレームワークを経験したので、それぞれのフレームワークについて私の見解を共有できると思いました。
既存の Web アプリケーションのロギング フレームワークを評価するように依頼されました。さまざまなオンライン フォーラムを調べた後、選択肢を NLog (v2.0) と log4net (v1.2.11) に絞り込みました。ここに私の発見があります:
NLog の設定/起動は非常に簡単です。彼らの Web サイトで入門チュートリアルを実行すると、完了です。nlog を使用するとどうなるか、かなりのアイデアが得られます。構成ファイルは非常に直感的で、誰でも構成を理解できます。例: 内部ログをオンに設定する場合は、Nlog 構成ファイルのヘッダー ノードにフラグを設定します。これは、期待される場所です。log4net では、web.config の appSettings セクションでさまざまなフラグを設定します。
log4net では、内部ログにタイムスタンプが出力されず、面倒です。Nlog では、タイムスタンプ付きの素敵なログが得られます。評価にとても参考になりました。
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」など、さまざまな比較も行われています。
私たちにとって、主な違いは全体的なパフォーマンスです...
Logger.IsDebugEnabled
私たちのテストから、NLog と 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();
ここにアクセスすると、NLog と Log4Net の両方のライブラリ、Enterprise Lib およびその他の製品を含む包括的なマトリックスを見つけることができます。
マトリックスは、マトリックスに存在する唯一の商用ライブラリの機能を強調する方法で作成されていると主張する人もいるかもしれません。それは本当だと思いますが、とにかく、NLog に対して私の選択を推進するのに役立ちました。
よろしく
お気づきのように、log4net は、アプリケーションの実行中は常に出力ファイルをロックするため、それらを削除することはできません。それ以外は似ています。
だから私はNLogを好みます。
管理されていないコードでも機能するため、NLogも2番目に使用します。log4netとlog4cxxを一緒に使用することも可能だと思いますが、NLogはマネージドコードとアンマネージドコードの両方をそのまま処理します。
また、ロギングAPIを抽象化するファサードであるCommon.Loggingも調べました。これは、log4net、NLog、およびEntrepriseLibraryをサポートしています。私はそれを使用するとは思いませんが、ロギングが無効になっているときにパフォーマンスを向上させるためにラムダを使用する方法が好きです(NLogやおそらく他の人と共有されている機能)。
また、 Microsoft Enterprise LibraryLoggingBlockを検討することもできます。素敵なデザイナーが付いてきます。
一般的なコンセンサスは、nlog の方が構成と使用が少し簡単だということだと思います。どっちも有能だけど。
私の経験によると、SmartInspectは NLog と log4net の両方に勝っています。
非常に使いやすく、ドキュメンテーションが優れており、インタラクティブなログ ビューアを使用して、以前にログに記録されたメッセージを表示およびフィルタリングできます。これは、現実世界での大きな利点です。
私が気に入っていることの 1 つは、Chrome のブラウザー タブのような、データのタブ ビューです。各タブは、ログの異なるフィルター処理されたビューを提供できます。