C#日志logging。 我应该使用什么?

我正在考虑切换到一个新的统一日志logging解决scheme,以用于我们的新产品线,我想看看Stack Overflow的一些人的想法。 我们将需要日志logging的各种应用程序:ASP .net,Windows服务,Web服务,WPF应用程序等我们只是一个窗口店。

我们对日志解决scheme的一些要求包括:

1)日志文件pipe理

- Ability to split files up over a certain size - Ability to auto archive/delete after certain period of time 

2)能够发送特定types的消息logging的电子邮件(例如错误)

3)能够写消息到Windows事件日志

 - We need to be able to specify where it's being written in the event log. It would also be nice if it would automatically create the event log source if it does exist. 

我已经开始看nLog,windows跟踪和log4net。 我并不局限于这三种,只是在search时出现了很多。

Solutions Collecting From Web of "C#日志logging。 我应该使用什么?"

log4net总是一个不错的选择。

http://logging.apache.org/log4net/

使用.NET通用日志记录 。 您可以稍后选择特定的提供者(NLog,CLog,log4net …),甚至创建自定义的提供者。

还有一个: NLog 。

  • 文件 – 单个文件或多个,具有自动文件命名和存档
  • 事件日志 – 本地或远程数据库 – 将日志存储在支持的数据库中
  • 由.NET网络 – 使用TCP,UDP,SOAP,MSMQ协议
  • 命令行控制台 – 包括消息的颜色编码
  • 电子邮件 – 每当发生应用程序错误时,您都可以收到电子邮件
  • ASP.NET跟踪
  • 还有很多

你可以看看企业库,他们有一个可扩展的日志应用程序块

http://entlib.codeplex.com/

http://entlib.codeplex.com/releases/view/46741

你可以下载开发指南pdf,他们有一个关于日志的部分(第4章)

看到这个问题的另一个全面的答案: 什么时候应该使用跟踪VS Logger.NET,企业库,log4net或Ukadc.Diagnostics?

简而言之,可用的主要日志框架是内置的.NET Framework System.Diagnostics,log4net,NLog和Enterprise Library Logging Application Block。

这些主要框架的比较可在以下网址获得: https : //essentialdiagnostics.codeplex.com/wikipage?title = Comparison

1)日志文件管理

上面列出的所有主要框架都支持滚动文件,但是我认为他们会将清理工作留给您。

例如在过去,我使用了一个计划的Windows作业,使用robocopy和“/ mov / minage X”将旧文件移动到其他地方,然后删除或者其他任何东西。

System.Diagnostics中使用的EventSchemaTracelistner,我最近在博客中提到 ,它有一个LimitedCircularFiles选项,但没有太多的查看日志的工具支持(它们是XML格式)。

2)能够发送特定类型的消息记录的电子邮件(例如错误)

上面列出的所有主要框架都可以直接或通过扩展(额外的监听器)来支持这个框架。

3)能够写消息到Windows事件日志

再次,所有的主要框架支持这一点,但是我通常会建议写入Windows事件日志应该直接完成,而不是通过跟踪。

其中一个问题是你问自动创建源的问题。

对事件日志(通过EventLog.WriteEvent)的任何写入都会自动尝试在第一个日志消息中创建源(如果它不存在) – 问题出在安全性上,只允许管理员创建源,因此运行作为一个普通的用户,这个失败

因此,您确实需要添加EventLogInstaller,以便在安装时创建源代码(安装由管理员完成)。 一旦创建,任何进程可以写入源。

这会导致我建议您需要创建并写入事件日志代码,以确保事件日志源相同。 另外,如果写入事件日志,通常不希望能够通过配置错误来“关闭”它。

我的个人建议是开箱即用的.NET Framework System.Diagnostics,尤其是Service Trace Viewer对于诊断问题非常出色,特别是在多层,多线程环境中,如果使用WCF,可以跨层传递关联标识。

你可以创建自己的日志库…我做了。

看看PostSharp http://www.sharpcrafters.com/他们有一些基本的日志记录系统的很好的例子。

http://alexworx.github.io/ALox-Logging-Library/

是一个非常直接的图书馆,如果你对性能有很高的要求,那么这个库是非常棒