我应该何时使用Tracing vs Logger.NET,Enterprise Library,log4net或Ukadc.Diagnostics?

时间:2011-01-23 17:24:16

标签: .net log4net enterprise-library nlog system.diagnostics

如何在标准跟踪,Logger.NET,企业库,log4net或Ukadc.Diagnostics之间进行选择?

是否存在一个比另一个更合适的情况?那会是什么? (ASP.NET,控制台应用程序,Azure云,SOHO,企业......)

有什么好处或缺点?

我是否错过了其他主要的日志记录框架?

6 个答案:

答案 0 :(得分:97)

答案 1 :(得分:5)

我刚开始在VS2010中使用log4net并发现它依赖于System.Web ...这使得它与“.NET xx Client Profile”框架目标不兼容...考虑到这里有人发布了关于Windows的内容使用客户端配置文件作为.NET可再发行组件进行更新,这意味着如果您希望在大多数计算机上运行代码,则log4net不再是选择的记录器...

感谢关于其他选项的信息 - 我会检查出来......

答案 2 :(得分:3)

只是添加一些从Microsoft的Build 2013会议中学到的东西:

  • 重载下的Log4NET写入文件主要是因为此进程是同步的。在某些条件下可能会出现争用和超时。这可以使用AppDynamics或任何其他类似工具进行验证。

  • NLog没有实现排队,所以在负载下,IO调用堆栈。

  • 据微软称,ETW使用高效的内核环缓冲区。 .NET 4.5和事件日志框架与Semantic Logging Application Bock (AKA SLAB)结合使用可以提高效率。

答案 3 :(得分:1)

我不是log4j或log4net的粉丝。我喜欢java.util.net日志记录工具,因此我在https://github.com/greggwon/NetLog/上的名为NetLog的github项目中重新创建了它。随意提供反馈。我正在尝试花一些时间在logging.properties文件的liu中放入基于ConfigurationManager的配置。使用java.util.logging,使用命令行属性设置来指定日志配置所在的位置总是很容易。如果不使用ConfigurationManager,使用.net会更痛苦。为CM提供支持,将为记录器和处理程序之间的某些不同关系打开大门,这可能会使一些事情变得更好。

NetLog包含一个EventLogHandler,它将登录到系统事件日志。它还将Level.EventLog级别设置为低于“警告”,这将允许您使用命名的“级别”来定位EventLog而不使用“警告”或“严重”。我还有一个TCPSocketHandler,它允许你远程登录到“日志记录”,这样你就可以在Windows上有一个“尾巴”,而没有“尾巴”程序可用。

答案 4 :(得分:0)

查看GitHub上的NetLog.Logging包,这是我的创作。它有一个监控应用程序,并遵循java.util.logging API范例,因为这是我喜欢使用的。它具有用于访问“写入”的旋转锁定,并且锁定持有者在继续之前将所有排队的记录写入限制。这将允许记录更少的基于竞争的I / O并提供良好的折衷。

答案 5 :(得分:0)

由于某种原因,System.Diagnostics不支持将所有跟踪输出定向​​到单个侦听器的方法。如果要将多个源定向到同一个侦听器,则必须按名称明确列出每个源。

在具有许多依赖关系的大型系统中,您可能不了解所有来源,而您可能并不关心。您只需要输出即可查看封面下发生的情况。必须为每个源单独设置监听器,这使得在大型系统中使用System.Diagnostics更加困难。

log4net不仅支持根级别的appender(侦听器),还支持分层日志记录,允许您将逻辑源集的日志记录配置为一个组。在我看来,这使得log4net成为明智的选择。