355

有人有这两种经验吗?它们如何相互叠加?

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

参考:

log4net

日志

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

4

15 回答 15

383

我最近的任务是为即将到来的项目“制作一些登录原型”。我没有任何日志框架经验。我在 Log4Net、NLog 和 Enterprise Library 上研究、浏览教程、制作玩具应用程序等几天。3-4 周后回来,将它们组合成一个有凝聚力的演示。希望其中一些对您有用。

我对我们项目的建议是:

  1. 使用日志外观(例如Common.LoggingSimpleLoggingFacade)来避免直接依赖。
  2. 如果我们最终将 Enterprise Library 用于其他设施,那么也将它用于 Logging。
  3. 如果我们最终使用依赖于 Log4Net 的东西,请使用 Log4Net。
  4. 如果以上都不是,请使用 NLog。我更喜欢哪个。

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

  • 所有 3 个框架都有能力并且可以做一些复杂的事情。我们想要一个高质量的解决方案,但坦率地说不需要超高性能或 60 种类型的事件接收器。
  • 这三个都有非常相似的基本概念。
  • 每个都有自己很酷的技巧,比如真正的高级路由、动态日志文件名、文件截断等。
  • 所有这 3 个都以自己的方式得到了很好的记录。
  • 对于像我这样的新手来说,一开始他们都有些尴尬。对于基础知识,这里没有太大的区别。我克服了它。
  • 几周后重新访问时,NLog显然是最容易恢复的。我几乎不需要刷它。使用 Log4Net,我不得不重新访问一些在线示例才能开始。使用 EntLib,我放弃了,从头开始重新学习教程——我完全迷失了。
  • 我不知道如何让 EntLib 做一些事情,比如登录到数据库。这可能很容易,但这超出了我的时间限制。
  • Log4Net 和 NLog 的代码内占用空间很小。EntLib 是垃圾邮件,但无论如何我都会使用外观。
  • 我不小心错误地配置了 EntLib,它在运行时告诉我。Log4Net 没有。我没有意外错误配置 NLog。
  • EntLib 带有一个漂亮的 app.config 编辑器,你 100% 需要它。NLog 有一个配置文件架构,因此您可以获得“智能感知”。Log4Net 带有 nada。

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

于 2010-01-22T23:47:01.890 回答
158

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

自 2006 年 4 月 19 日发布 1.2.10 版以来,Log4Net 尚未更新

相比之下,NLog 自 2006 年以来一直受到积极支持,即将发布NLog 2.0 支持许多在 log4net 上次更新时不存在的平台,例如:

  • NET Framework 2.0 SP1 及更高版本、3.5 和 4.0(客户端和扩展配置文件)
  • 银光 2.0、3.0、4.0
  • .NET Compact Framework 2.0、3.5
  • 单声道 2.x 配置文件
于 2010-10-01T17:05:01.990 回答
97

最近有两个框架的经验,我想我可以分享我对每个框架的看法。

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

  1. 使用 NLog 设置/启动非常简单。你在他们的网站上浏览入门教程,你就完成了。你有一个公平的想法,nlog 的情况如何。配置文件非常直观,任何人都可以理解配置。例如:如果要设置内部日志记录,则在 Nlog 配置文件的标头节点中设置标志,这是您期望的位置。在 log4net 中,您可以在 web.config 的 appSettings 部分设置不同的标志。

  2. 在 log4net 中,内部日志不会输出令人讨厌的时间戳。在 Nlog 中,您会得到一个带有时间戳的漂亮日志。我发现它在我的评估中非常有用。

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

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

  5. Log4net 不支持异步 appender。

选择 NLog 作为日志框架对我来说已经足够了。:)

于 2011-12-27T23:15:32.670 回答
36

For anyone getting to this thread late, you may want to take a look back at the .Net Base Class Library (BCL). Many people missed the changes between .Net 1.1 and .Net 2.0 when the TraceSource class was introduced (circa 2005).

Using the TraceSource is analagous to other logging frameworks, with granular control of logging, configuration in app.config/web.config, and programmatic access - without the overhead of the enterprise application block.

There are also a number of comparisons floating around: "log4net vs TraceSource"

于 2010-08-31T18:06:48.003 回答
34

对我们来说,关键的区别在于整体性能......

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

干杯,弗洛里安

于 2009-10-22T10:19:24.263 回答
25

First look at the rest of your stack.

If you are using NHibernate, it utilizes Log4Net directly. Other frameworks might have other specific loggers they need.

Other than that: both work fine.

I've settled on Log4Net myself. It can be a pain to configure, and if it isn't configured correctly it is a pain to figure out what went wrong. But you can make it do almost anything you would want from a logger.

If you don't have a standing issue with Log4Net, here is an article I wrote on how to get started with it: http://elegantcode.com/2007/12/07/getting-started-with-log4net/

于 2009-04-02T18:03:21.540 回答
16

好吧..我使用企业库来执行数据库日志记录任务,现在由于性能瓶颈而切换到 NLog。

一些比较信息:

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

于 2010-10-07T20:10:11.907 回答
14

我回应上述内容并且更喜欢nLog。Entlib 是不必要的臃肿。

Re:Log4net 对 log4net 来说总是让我感到困惑的一件事是忘记将以下内容添加到 global.asax 以初始化组件:

log4net.Config.XmlConfigurator.Configure();
于 2010-06-27T14:50:20.777 回答
13

如果你去这里,你可以找到一个包含 NLog 和 Log4Net 库以及 Enterprise Lib 和其他产品的综合矩阵。

有人可能会争辩说,矩阵的完成方式是为了强调矩阵中唯一商业库的特征。我认为这是真的,但无论如何推动我的选择与 NLog 是有用的。

问候

于 2010-09-25T10:14:33.210 回答
9

Shameless plug for an open source project I run, but given the lively discussion about which .NET logging framework is more active I thought I'd post an obligatory link to Serilog.

To use within an application, Serilog is similar to (and draws heavily on) log4net. Unlike other .NET logging options, however, Serilog is about preserving the structure of log events for offline analysis. When you write:

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

Most logging libraries immediately render the message into a string. Serilog can do that too, but it preserves the { Answer: 42 } property so that later on, using one of a number of NoSQL data stores, you can properly query events based on the value of Answer.

We're close to a 1.0 and support all of the modern (.NET 4.5, Windows Store and Windows Phone 8) platforms.

于 2013-10-05T03:45:24.487 回答
9

正如我所注意到的,log4net 在应用程序运行的整个过程中都会锁定它们的输出文件,因此您无法删除它们。否则它们是相似的。

所以我更喜欢NLog。

于 2009-09-04T16:53:40.883 回答
8

I second NLog too because it works with unmanaged code too. I suppose it could be possibe to use log4net and log4cxx together, but NLog handles both managed and unmanaged code out of the box.

I also looked at Common.Logging, a facade that makes abstraction of the logging api, it supports log4net, NLog and Entreprise Library. I don't think i'll use it, but i like how they use lambdas to improve performance when logging is disabled (a feature shared with NLog and probably others).

于 2011-01-05T13:36:26.257 回答
4

You might also consider Microsoft Enterprise Library Logging Block. It comes with nice designer.

于 2009-04-02T18:18:36.730 回答
2

我认为普遍的共识是 nlog 更容易配置和使用。不过,两者都相当有能力。

于 2009-05-04T01:44:48.837 回答
0

根据我的经验,SmartInspect击败了 NLog 和 log4net。

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

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

于 2013-08-10T11:18:09.410 回答