log4net vs. Nlog

有人有这两方面的经验吗?它们之间有什么不同?

我们计划使用其中一个来登录企业应用程序。

引用:

log4net

nlog

编辑:我们对nlog或log4net没有现有的依赖关系。

142279 次浏览

首先查看堆栈的其余部分。

如果你正在使用NHibernate,它直接利用Log4Net。 其他框架可能有他们需要的其他特定的记录器

除此之外:两者都很好。

我自己选择了Log4Net。配置起来很麻烦,如果配置不正确,找出哪里出了问题也很麻烦。但是,您可以让它做几乎任何您想从日志记录器。

如果你对Log4Net没有长期的问题,这是我写的一篇关于如何开始使用它的文章: http://elegantcode.com/2007/12/07/getting-started-with-log4net/ < / p >

你也可以考虑微软企业库日志记录块。它有很好的设计师。

我认为一般的共识是nlog更容易配置和使用。不过,两者都很有能力。

正如我注意到的那样,log4net在应用程序运行的整个过程中都会锁定它们的输出文件,因此不能删除它们。除此之外,它们是相似的。

所以我更喜欢NLog。

对我们来说,关键的区别在于整体表现……

看看NLog和Log4Net中的Logger.IsDebugEnabled,从我们的测试来看,NLog有更少的开销,这就是我们所追求的(低延迟的东西)。

< p >欢呼, Florian < / p >

我最近被要求为一个即将到来的项目“创建一些登录的原型”。我没有任何日志框架的经验。我花了几天时间在Log4Net、NLog和Enterprise Library上研究、浏览教程、制作玩具应用程序等。3-4周后再回来,将它们整合成一个完整的演示版本。希望这些对你们有用。

我对我们项目的建议是:

  1. 使用日志facade(例如常见的。日志记录SimpleLoggingFacade)来避免直接依赖。
  2. 如果我们最终要将企业库用于其他功能,那么也要将其用于日志记录。
  3. 如果我们最终要使用依赖于Log4Net的东西,那么就使用Log4Net。
  4. 如果以上都不是,请使用NLog。我更喜欢这样。

这是基于以下发现(意见!):

  • 这3个框架都很强大,可以做一些复杂的事情。我们想要一个高质量的解决方案,但坦率地说,不需要超高的性能或60种类型的事件接收器。
  • 这三种都有非常相似的基本概念。
  • 每一种都有自己很酷的技巧,比如非常高级的路由、动态日志文件名、文件截断等等。
  • 这三种方法都以各自的方式得到了很好的记录。
  • 对于像我这样的新手来说,他们一开始都有点尴尬。这里的基本知识没有太大的区别。我挺过来了。
  • 当几周后重新审视事情时,NLog是很明显最容易恢复的。我只需要稍微复习一下。对于Log4Net,我必须重新访问一些在线示例才能继续。有了EntLib,我放弃了,重新从头开始做教程——我完全迷失了。
  • 我不知道如何让EntLib做一些事情,比如日志到数据库。这可能很容易,但超出了我的时间限制。
  • Log4Net和NLog占用的代码很小。EntLib是垃圾邮件,但我还是会在上面使用一个门面。
  • 我不小心错配置了EntLib,它在运行时告诉我。Log4Net没有。我没有意外错误配置NLog。
  • EntLib附带了一个漂亮的app.config编辑器,这是你100%需要的。NLog有一个配置文件模式,所以你可以获得“智能感知”。Log4Net什么都没有。

显然到目前为止我喜欢NLog。尽管有其他可用的解决方案,但还不足以使用它。

我赞同上面的方法,并且更喜欢nLog。Entlib不必要地膨胀。

有一件事总是让我与Log4net忘记添加以下到全局。Asax初始化组件:

log4net.Config.XmlConfigurator.Configure();

对于那些晚到这个线程的人,你可能想要回顾一下。net基类库(BCL)。当TraceSource类引入时(大约在2005年),许多人忽略了。net 1.1和。net 2.0之间的变化。

使用TraceSource类似于其他日志框架,对日志进行粒度控制,在app.config/web中配置。配置和编程访问-没有企业应用程序块的开销。

还有很多比较:“log4net vs TraceSource”

如果你去在这里,你可以找到一个全面的矩阵,包括NLog和Log4Net库,以及企业库和其他产品。

有人可能会说,这个矩阵是为了强调矩阵中唯一的商业图书馆的特征。我认为这是正确的,但它是有用的,无论如何驱动我的选择与NLog。

问候

一个没有被过多讨论的关键考虑因素是支持和更新。

Log4Net自2006年4月19日发布1.2.10版本以来一直没有更新

相反,自2006年以来一直积极支持的NLog将很快发布NLog 2.0支持许多平台,当log4net上次更新时还不存在,例如:

  • NET Framework 2.0 SP1及以上,3.5 &4.0(客户端和扩展配置文件)
  • Silverlight 2.0, 3.0, 4.0
  • .NET紧凑框架2.0,3.5
  • Mono 2。x档案
< p >好. .我使用Enterprise库执行数据库日志记录任务 现在由于性能瓶颈,我切换到NLog

一些比较信息:

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

我也支持NLog,因为它也适用于非托管代码。 我认为可以同时使用log4net和log4cxx,但是NLog同时处理托管和非托管代码

我还看了常见的。日志记录,一个对日志api进行抽象的facade,它支持log4net, NLog和enterprise Library。我不认为我会使用它,但我喜欢他们如何使用lambdas来提高日志记录被禁用时的性能(一个与NLog和其他可能共享的特性)。

由于最近使用过这两个框架,我想我可以分享一下我对这两个框架的看法。

我被要求评估现有web应用程序的日志框架,在浏览了各种在线论坛后,我将选择范围缩小到NLog (v2.0)和log4net (v1.2.11)。以下是我的发现:

  1. NLog的设置/启动非常简单。你浏览了他们网站上的入门教程,你就完成了。你会对nlog的情况有一个大致的了解。配置文件是如此直观,任何人都可以理解配置。例如:如果你想设置内部登录,你可以在Nlog配置文件的头节点中设置标志,这是你期望它在的地方。在log4net中,您可以在web中设置不同的标志。配置的appSettings部分。

  2. 在log4net中,内部日志记录不输出时间戳,这很烦人。在Nlog中,你会得到一个带时间戳的日志。我发现它在我的评估中非常有用。

  3. 过滤器在log4net -你最好检查我的这个问题- log4net过滤器——如何编写AND过滤器来忽略日志消息,如果你找到了答案/解决方案,请让我知道。 我知道,对于这个问题有一个变通办法,因为你可以编写自己的自定义过滤器。但是一些在log4net中不容易得到的东西。

  4. 性能——我使用一个存储过程向数据库记录了大约3000条日志消息。我使用了简单的for循环(int I =0;i< 3000;我+ +……将同一条消息记录3000次。对于写入:log4net, AdoAppender花费的时间几乎是NLog的两倍。

  5. Log4net不支持异步追加器。

经过比较,我选择了NLog作为日志框架。:)

根据我的经验,SmartInspect优于NLog和log4net。

它非常容易使用,文档很棒,你可以查看和过滤以前记录的消息与他们的交互式日志查看器,这是一个巨大的现实世界的优势。

我喜欢的一件事是数据的标签视图,就像Chrome中的浏览器标签。每个选项卡都可以提供不同的日志过滤视图。

对于我运行的一个开源项目的无耻插件,但是考虑到关于哪个. net日志框架更活跃的热烈讨论,我想我应该发布一个到Serilog的强制性链接。

要在应用程序中使用,Serilog类似于log4net(并大量借鉴了log4net)。然而,与其他. net日志选项不同的是,Serilog是关于保存日志事件的结构以供脱机分析。当你写:

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

大多数日志库立即将消息呈现为字符串。Serilog也可以这样做,但它保留了{ Answer: 42 }属性,以便以后使用许多NoSQL数据存储之一时,您可以根据Answer的值正确地查询事件。

我们已经接近1.0并支持所有的现代(。NET 4.5、Windows Store和Windows Phone平台。