NLog vs log4netを比較する方法

NLOGとlog4netの両方が、.NETアプリケーション用のログフレームワークを選択するときに非常に一般的な選択肢です。 この記事では、フレームワークと違いの両方についてすべて学びます。 フレームワークの一方または両方を知らない人のために、各フレームワークについていくつかの言葉から始めましょう。

log4net

おそらくブロック上で最も古いロギングフレームワークであるlog4netは、.NETが導入されてからかなり存在していました。 log4netは元々、2001年にNeoworks Limitedによって開発されたApache log4jの内部ポートでした。 プロジェクトはすぐにSourceforge(2001年のGitHub)に移動し、Apacheライセンスの下でリリースされました。 その時以来、log4netは、アプリケーションにロギングを追加するための.NETの世界で最も人気のある選択肢の一つでした。

log4netは、ログメッセージを異なるデータストアにルーティングできるアペンダの概念で動作します。 ファイルシステム、SQL Server、HTTPエンドポイント、さらにはNoSQLデータベースへのロギングなど、多くのアペンダーが長年にわたって実装されてきましたが、非構造化テキ

NLog

log4netがすぐにデフォルトの選択肢になりましたが、代替案が表示され始めました。 おそらく、log4netの優位性に対する最初の本当の競争相手はNLogでした。 もともとJarek Kowalskiによって開発され、ほぼ100人からのプルリクエストで、NLogは素晴らしい選択肢です。 Log4netは2006年からほとんど静止していましたが、NLogはちょうど続けました。 Jarekはgoogleから始めたときにプラグを引っ張っているように見えましたが、コミュニティはステップアップしているように見え、新しいリリースはまだ流れています。

log4netと同様に、NLogには複数のログターゲットが含まれており、さまざまなデータストアにメッセージをログに記録できます。

設定

すべてのログフレームワークは、フレームワークが何をログに記録するか、どこにログを記録するかを知るために、何らかの設定が必要です。

log4net

log4netはアプリを介して設定されます。設定ファイルまたは専用のlog4net。構成:

NLog

NLOGはXMLとC#の両方を使用して構成できます。 それは最初から存在しており、C#ベースのAPIはSerilogのような新しいフレームワークほど素晴らしいものではないので、ほとんどの人はXMLを使用しています。

ログメッセージ

アプリケーションからのログメッセージに関しては、log4netとNLogはかなり似ています。

log4net

ログメッセージはlog4net APIを使用して書き込まれます:

var log = LogManager.GetLogger(typeof(Bar));log.Debug("Hello World");

さまざまなコンテキストオプションを使用して、追加のログ情報をログメッセージに添付できます:

log4netを使用すると、ログメッセージに直接情報を埋め込むことができますが、セマンティックロギングはサポートされていません。

NLog

NLogは、設定されたターゲットセットにメッセージをログに記録するためのlog4netと同様のAPIを提供します:

var logger = NLog.LogManager.GetCurrentClassLogger();logger.Debug("Hello World");

追加のプロパティを添付することもできます:

var msg = new LogEventInfo(LogLevel.Debug, "", "Hello World");msg.Properties.Add("Application", "MyCoolApp");logger.Debug(msg);

NLogの最新バージョンでは、セマンティックロギングがサポートされています。 ログメッセージにセマンティックを追加するには、中括弧の構文を使用します:

logger.Info("Order {orderid} created for {user}", 42, "Kenny");

結論

勝者を選ぶことはこの投稿の目標ではありません。 両方のログフレームワークには、独自の利点と欠点があります。