企业日志块 vs NLog vs log4net

26
我需要在我的项目中使用一个日志库,正在考虑使用企业日志块(Enterprise Logging Block)、NLog或log4net。我发现一些比较的链接,但大多数都很陈旧,并抱怨log4net已经很长时间没有新版本等问题。
请问有没有人对当前数据而言哪个更易于使用、配置、性能更好、可扩展性更强等方面有建议?

4
看一下这个答案:https://dev59.com/kXRB5IYBdhLWcg3wH0WW#2121341 - Stefan Egli
5个回答

18

我刚刚评估了log4net和NLog,以便在一个大项目中使用。两者都具有类似的界面,并且高度可配置。

NLog似乎维护得更好:log4net与.Net4不兼容问题在log4net中一直没有解决。 Nlog带有更多的“花里胡哨”功能,如NuGet软件包和用于编辑配置文件的Visual Studio Xml架构。

最终我们决定使用log4net,因为我们测量到log4net的性能要好得多:对一个简单的测试,将10000条日志消息写入文件和网络日志查看器(Log2Console)中,log4net的性能表现是NLog的十倍!我们在配置文件中没有进行任何调整,文件和网络记录器是使用最小配置的。您应该使用项目的典型日志设置来验证这一点。


26
刚才使用性能分析器查看了一下:问题似乎出在日志记录器的默认设置上。log4net默认将日志文件保持打开状态,而NLog则不是。如果你适当地配置NLog,它的性能就和log4net一样好。 - W.Gross
2
我很想看到有关记录器性能的详细分析,大多数讨论似乎围绕着有限数量的个人测试案例展开。我听很多人说NLog比Log4Net快得多,但他们没有提供具体数字。无论如何,它们都比EntLib日志记录要快 :) - Scott Simontis

10

我个人喜欢log4net。它快速、稳定,而且可以进行配置(还可以很容易地通过自定义 appender 进行扩展)。

我并不在意缺少新版本发布 - 在我看来,这只是证明代码库很稳定,并包含了应该有的功能。毕竟,我最想要的就是 logging 稳定。

这里有一个 类似的问题,也许你可以从那里使用一些答案。


3
这个人写道,Log4Net有很多漏洞,并且在它自己的测试套件中经常失败。尽管情况可能已经改善,但基于下面这种问题以及发布.NET4兼容版本所需的时间,我还不敢称其为稳定。 - Scott Simontis
1
@Scott:这是一个非常老的帖子。现在log4net正在重新开发,例如当前版本是2015-03。因此,这不是正确的论点。 - VikciaR

6

如果您使用Common.Logging,则可以推迟决定“使用哪个记录器”的时间。这是一个记录器包装器,您可以配置记录是否应该进入log4net、nlog或System.Diagnostics.Debug。我不知道企业级日志块(Enterprise Logging Block),也不知道是否有适用于Common Logging的“企业级日志块”插件。


那个链接没有更新。你应该链接到https://github.com/net-commons/common-logging。 - Rosdi Kasim
@Rosidi 感谢提供的信息。我已经将链接从http://netcommon.sourceforge.net/更新为github.com/net-commons/common-logging。 - k3b

4

经常被忽视的另一个区别是NLog采用BSD许可证,而log4net则采用Apache许可证。ELB属于MS-PL(微软的开源版本)。在大多数情况下这可能并不重要,只是提一下。


BSD许可证和Apache许可证的区别是什么?我认为我在Thrift和Zeroc许可证中也遇到了这种区别。 - Nick
它们都是相当类似的宽松许可证,其中Apache更为详细(因此更为复杂)和限制性。我不太理解,但一个主要的区别是使用Apache许可证需要明确说明您对代码所做的更改。 - nawfal

2

我发现它们都非常相似且功能强大。虽然我已经好几年没有使用企业库日志块了,但即使在当时,它也还不错。NLog和log4net都很稳定。

选择一个而不是另一个的原因可能是第三方库的集成。例如,如果您正在使用NHibernate或Quartz或其他利用log4net的库,这可能会影响您的选择。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接