【问题标题】:What's the most widely-used logging framework in C#? [closed]C# 中使用最广泛的日志记录框架是什么? [关闭]
【发布时间】:2010-11-18 14:40:09
【问题描述】:

我正在研究如何在我的 C# 应用程序中实现日志记录 - 它是一个 DLL 类库。哪些日志记录框架使用最广泛——什么可以为我的 DLL 的用户提供最大的灵活性和可配置性?有 C# 等效的 log4j 吗?

【问题讨论】:

标签: c# logging


【解决方案1】:

2009 答案: .NET 平台的 log4j 等效项是 log4net,我猜它被广泛使用。


2019 答案:以下是来自https://github.com/quozd/awesome-dotnet/blob/master/README.md#logging 的各种替代方案:

  • Essential Diagnostics - 扩展 System.Diagnostics 命名空间的内置功能以提供灵活的日志记录
  • NLog - NLog - 高级 .NET 和 Silverlight 日志记录
  • Logazmic - 适用于 Windows 的开源 NLog 查看器
  • ELMAH - ELMAH 官方网站
  • Elmah MVC - MVC 的 Elmah
  • Logary - Logary 是用于 Mono 和 .NET 的高性能、多目标日志记录、度量、跟踪和健康检查库。 .NET 对 DropWizard 的回答。支持多种目标,专为微服务构建。
  • Log4Net - Apache log4net 库是帮助程序员将日志语句输出到各种输出目标的工具
  • com.csutil.Log - 一个轻量级的零配置日志包装器,可以与 Serilog 等其他日志库结合用于更复杂的用例。
  • Serilog - NoSQL 时代的严肃日志库。在一个易于使用的软件包中结合了传统和结构化诊断日志记录的优点。
  • StackExchange.Exceptional - 用于 Stack Exchange 网络的错误处理程序
  • Semantic Logging Application Block (SLAB) - 扩展 System.Diagnostics.Tracing 命名空间(EventSource 类)的内置功能,以记录到多个接收器,包括 Azure 表、数据库、文件(JSON、XML、文本)。支持通过 ETW 进行进程内和进程外日志记录,并支持 Rx 实时过滤/聚合事件。
  • Foundatio - 一个流畅的日志 API,可用于在整个应用程序中记录消息。
  • Exceptionless - 无异常的 .NET 客户端
  • Loupe - 集中的 .NET 日志记录和监控。 [专有] [免费层]
  • elmah.io - 使用 ELMAH 的 .NET Web 应用程序的云日志记录。在上线之前找到错误。强大的搜索、API、与 Slack、GitHub、Visual Studio 等的集成。 [Free for OSS] [$]
  • BugSnag - 记录错误。包括有用的诊断信息,如堆栈跟踪、会话、发布等。有一个免费层。 [OSS免费][$]

【讨论】:

  • 我几乎在所有 .NET 应用程序中都使用 log4net。但是,我的类没有直接引用 log4net,我将这个基础设施问题隐藏在接口后面并使用依赖注入。
  • 我们也在使用 log4net。这太棒了。非常灵活,非常快速。
  • 使用 log4net 并且永不回头……难道不使用 log4net 吗?
  • log4net 意识形态开始有点老了。检查例如新鲜想法的日志:github.com/logary/logary
【解决方案2】:

已在众多项目中成功使用 NLog。

【讨论】:

    【解决方案3】:

    我们使用自己的日志记录类,通过调用log4net 实现。这使我们能够利用这个灵活且广泛使用的框架,同时避免在源代码中直接引用它。

    【讨论】:

      【解决方案4】:

      log4net 几乎可以肯定是最常见的。

      但我使用 Common.Logging - http://netcommon.sourceforge.net/,因为它给了我灵活性

      有多种日志记录 .NET 目前的实现 使用,log4net,企业库 日志,NLog,以命名最多 受欢迎的。拥有的缺点 不同的实现是 它们不共享一个通用接口 并因此强加一个特定的 对用户的日志记录实现 你的图书馆。

      Common.Logging 库引入了一个 简单的抽象让你 选择特定的日志记录 在运行时实现。这样你 可以推迟决定什么特别 要使用的日志库,直到 部署。适配器用于 插入特定的日志记录系统 进入 Common.Logging。

      【讨论】:

      • 推迟决定有什么好处?
      • 哇,这已经 8 岁多了。正如 Common.Logging 所说(现在仍然如此),您可以将决定推迟到部署。例如;也许你想给你的系统贴上白标签?想要托管它的公司的 devops 更喜欢 Enterprise Library Logging,而另一个 devops 团队更喜欢 log4net。
      • 我对使用 Common.Logging 很感兴趣(感谢您的提示,顺便说一句),但我对抽象层/运行时解析所带来的性能开销感到厌烦。您是否知道与此相关的任何基准?
      • 恐怕不是@DaffyPunk,我使用.NET 已经六年多了。但我想它可以忽略不计,没什么好担心的?:wiki.c2.com/?PrematureOptimization ;)
      【解决方案5】:

      我多年来一直在成功使用 NLog,这是一个非常出色的项目。

      【讨论】:

        【解决方案6】:

        人们一直在广泛使用 Enterprise Library。但现在开发人员正在转向其他产品,这可能是真的。

        我会检查一下,看看它是否具有您需要的必要功能,并且不会太臃肿。

        【讨论】:

          【解决方案7】:

          Enterprise Library. 它功能强大,直接来自 Microsoft,包括所有最佳实践。我们在所有项目中都使用它。它非常灵活,并且有一个 UI 工具可供您使用,以防您不想从配置文件中管理日志记录。

          【讨论】:

          • 投反对票,因为企业库不健壮。它很慢,增加了可笑的开销,而且 API 也不是很好。
          • 我不确定你现在想争论什么。我们谈论的是稳健性和受欢迎程度。基准测试显示 EL 比其他所有速度慢 3 个数量级(!!!)。 essentialdiagnostics.codeplex.com/wikipage?title=Comparison您可能在您的应用程序中产生开销而没有意识到这一点。话虽如此,您可以为 EL LogWriter 编写一个扩展方法来解决这个问题,但关键是 EL 开箱即用。 “各有各的”不是一个有效的工程论点!我们是工程师,而不是政客!
          • @JohnZabroski 来自维基百科:在计算机科学中,稳健性是计算机系统在执行过程中处理错误的能力。鲁棒性也可以定义为算法在输入、计算等出现异常的情况下继续运行的能力。您因 robust 这个词而投反对票,但您的所有论点都基于性能损失.默认情况下,EL Logger 会吞下异常,因此它绝对是强大的,因为它不会干扰您的程序流程。
          • @imlokesh - 所有日志框架都可以通过更改线程的时间和程序流中发生上下文切换的时间来干扰程序流。我也不会将健壮的程序流定义为简单地吞下异常,因为处理“健壮性”的最佳位置是在应用程序代码中。可悲的是,吞下的异常并不能保证程序的继续运行(哦,如果有那么容易!)。
          • @JohnZabroski 我只是说你的反对票没有道理。
          猜你喜欢
          • 2011-04-25
          • 1970-01-01
          • 2011-06-07
          • 2020-07-19
          • 2010-09-07
          • 1970-01-01
          • 2011-02-09
          • 2010-12-16
          • 1970-01-01
          相关资源
          最近更新 更多