【问题标题】:log4net vs. Nloglog4net 与 Nlog
【发布时间】:2010-10-17 04:30:09
【问题描述】:

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

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

参考资料:

log4net

nlog

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

【问题讨论】:

  • 这是我使用的记录器:System.IO.File.AppendAllText(@"c:\log.txt", string.Format("{0}\r\n", message) );
  • 对你有好处,但有些人可能需要动态打开/关闭日志记录、使用不同日志级别、自动删除旧日志数据等功能。
  • 需要注意的是Log4Net的文档很烂。
  • 你应该试试 ReflectInsight。比insightextensions.codeplex.com 都强大得多
  • @code5 ReflectInsight 查看器是商业版(2014 年 3 月前免费),2013 年 7 月 1 日后 299 美元。

标签: log4net nlog


【解决方案1】:

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

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

除此之外:两者都可以正常工作。

我自己选择了 Log4Net。配置可能很痛苦,如果配置不正确,找出问题所在也很痛苦。但是你可以让它做几乎任何你想从记录器中得到的东西。

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

【讨论】:

  • @greg:请注意,在 NHibernate v3 中,对 log4net 的依赖已被移除 - 它是可插入的,因此您可以根据需要使用 NLog。
  • NLog 配置/找出问题所在也同样痛苦。至少使用 log4net 你可以找到文档和/或谷歌的问题。
  • 很好地考虑到你的堆栈的其余部分,我不能说这是我会考虑的一个问题。虽然看起来 NHibernate 不再是这种情况的示例,但 Sitecore 提供了一个当代示例,因为它在内部使用 Log4Net。 Sitecore 非常可扩展,因此您可以使用您喜欢的任何日志记录,但这比编辑站点的 web.config 以添加您自己的记录器要复杂得多
【解决方案2】:

您也可以考虑Microsoft Enterprise Library Logging Block。它配备了不错的设计师。

【讨论】:

  • 使您能够以视觉方式配置它,而不是手工制作 XML。看你的口味...
  • 这样的事情使用可视化工具的想法并不是一件好事。
  • 也许不是一件好事,但对于 EntLib 可视化配置器是必要的。手动编写配置几乎是不可能的,太复杂了(你知道,它来自微软)。
  • 即使有人不喜欢视觉设计师,为什么要投反对票! :o
  • EntLib 会同步记录日志,它基本上会影响性能。
【解决方案3】:

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

【讨论】:

    【解决方案4】:

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

    所以我更喜欢 NLog。

    【讨论】:

    【解决方案5】:

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

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

    干杯, 弗洛里安

    【讨论】:

      【解决方案6】:

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

      我对我们项目的建议是这样的:

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

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

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

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

      【讨论】:

      • +1 关于建议为真正的关注点分离 (SoC) 构建外观,否则您不会污染您的域。
      • 门面只有在不破坏依赖于调用堆栈的诊断值的情况下才有效。我见过很多门面破坏了这些基本诊断功能,最终做得更多害得那么好……
      • Log4Net 尚不支持 .NET 3.5 SP1 和 .NET 4 的客户端配置文件,因为它引用了 System.Web。只是想指出这一点,尽管它实际上与“依赖于 Log4Net,使用 Log4Net”密切相关。
      • NLog 受到积极支持 (nlog-project.org/download),而 Log4Net 自 2006 年 4 月 19 日发布 1.2.10 版以来尚未更新 (issues.apache.org/jira/browse/LOG4NET/fixforversion/11128)
      • 如果您依赖于使用 log4net 的库并想改用 NLog(反之亦然),编写和配置自定义 Appender 类来连接两者相当简单。
      【解决方案7】:

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

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

      log4net.Config.XmlConfigurator.Configure();
      

      【讨论】:

        【解决方案8】:

        对于迟到的人,您可能想回顾一下 .Net 基类库 (BCL)。当引入 TraceSource 类时(大约在 2005 年),许多人错过了 .Net 1.1 和 .Net 2.0 之间的变化。

        使用 TraceSource 类似于其他日志记录框架,可以精细控制日志记录、app.config/web.config 中的配置和编程访问 - 没有企业应用程序块的开销。

        还有一些比较浮动:“log4net vs TraceSource”

        【讨论】:

        • EntLib 正在扩展 TraceSource
        【解决方案9】:

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

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

        问候

        【讨论】:

        • 从这个矩阵来看,至少与作为商业竞争对手的 Object Guy 的框架相比,它似乎已经过时了。
        【解决方案10】:

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

        Log4Net hasn't been updated since version 1.2.10 was published April 19, 2006.

        相比之下,NLog 从 2006 年开始就得到积极支持,即将发布NLog 2.0 supporting many platforms that didn't exist when log4net was last updated 如:

        • NET Framework 2.0 SP1 及更高版本、3.5 和 4.0(客户端和扩展配置文件)
        • Silverlight 2.0、3.0、4.0
        • .NET Compact Framework 2.0、3.5
        • Mono 2.x 配置文件

        【讨论】:

        • 但它需要更新吗?没坏就不用修了?
        • 坏了: * 在 Vista 和 Win7 上的本地主机的 IPv4/IPv6 之间的 IP 地址解析混乱(几个非官方补丁正在浮动) * 不能在 . Net 4.0 客户端配置文件
        • Log4Net 似乎正在开发一个 .NET 4.0 版本。
        • log4net has launched v1.2.11 on October 2011。我认为这个答案现在已经过时了。
        • 其实这个答案对我还是很有价值的。我正在选择一个记录器,这个答案告诉我们log4net在过去五年中已经更新了一次,而NLog是一个更活跃的项目。
        【解决方案11】:

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

        一些比较信息:

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

        【讨论】:

          【解决方案12】:

          我也是第二个 NLog,因为它也适用于非托管代码。 我想可能同时使用 log4net 和 log4cxx,但 NLog 可以开箱即用地处理托管和非托管代码。

          我还查看了Common.Logging,这是一个抽象日志 API 的外观,它支持 log4net、NLog 和 Entreprise Library。我不认为我会使用它,但我喜欢他们在禁用日志记录时如何使用 lambdas 来提高性能(与 NLog 和可能其他人共享的功能)。

          【讨论】:

            【解决方案13】:

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

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

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

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

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

            4. 性能 - 我使用存储过程将大约 3000 条日志消息记录到数据库。我使用简单的 for 循环 (int i=0; i

            5. Log4net 不支持异步 appender。

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

            【讨论】:

            【解决方案14】:

            根据我的经验,SmartInspect 胜过 NLog 和 log4net。

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

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

            【讨论】:

            • 这是一个付费产品。 NLog 和 Log4Net 是免费的。
            【解决方案15】:

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

            要在应用程序中使用,Serilog 类似于(并大量使用)log4net。然而,与其他 .NET 日志记录选项不同,Serilog 是关于保留日志事件的结构以供离线分析。当你写:

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

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

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

            【讨论】:

            • 但问题是:它支持Mono吗? ;) 它看起来很有前途(我喜欢线和针标志),但找不到任何关于它是否支持 Mono 的信息。
            • 好问题 :) ... 是的,我们有 Mono 用户 - 我不确定他们使用的是 .NET 4.5 还是 4.0 版本的 Serilog,但如果您遇到任何问题,我们会帮忙的。
            • .NET 4.5 支持让我立即下载并试用您的解决方案
            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2017-02-16
            • 1970-01-01
            • 1970-01-01
            • 2011-05-18
            相关资源
            最近更新 更多