C#日志记录。我该怎么用?

时间:2011-01-12 16:04:23

标签: c# windows logging

我正在寻求切换到新的统一日志记录解决方案,以便在我们的新系列产品中使用,我想看看Stack Overflow上的一些人在想什么。我们需要记录各种应用程序:ASP .net,Windows服务,Web服务,wpf应用程序等。我们只是一个Windows商店。

我们对日志记录解决方案的一些要求包括:

1)日志文件管理

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

2)能够针对记录的某些类型的消息发送电子邮件(例如错误)

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 trace和log4net。我不仅限于这3个,只是在搜索时出现了很多。

7 个答案:

答案 0 :(得分:17)

log4net始终是一个不错的选择。

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

答案 1 :(得分:11)

使用 .NET common logging 。您可以稍后选择特定的提供程序(NLog,CLog,log4net ...),甚至可以创建自定义的提供程序。

答案 2 :(得分:9)

还有一个:NLog

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

答案 3 :(得分:3)

您可以查看Enterprise Library,它们有一个可扩展的日志记录应用程序块

http://entlib.codeplex.com/

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

您可以下载开发指南pdf,它们有一个关于日志记录的章节(第4章)

答案 4 :(得分:1)

请参阅此问题以获得另一个全面的答案:When should I use Tracing vs Logger.NET, Enterprise Library, log4net or Ukadc.Diagnostics?

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

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

  

1)日志文件管理

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

e.g。在过去,我使用了一个预定的Windows作业,该作业使用robocopy和“/ mov / minage X”将旧文件移动到其他地方,然后删除或其他任何内容。

System.Diagnostics中使用的EventSchemaTraceListener,我blogged about recently,有一个LimitedCircularFiles选项,但查看日志的工具支持不多(它们是XML格式)。

  

2)能够针对记录的某些类型的消息发送电子邮件(例如错误)

上面列出的所有主要框架都直接或通过扩展(其他侦听器)支持此功能。

  

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

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

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

对事件日志的任何写入(通过EventLog.WriteEvent)自动尝试在第一条日志消息上创建源(如果它不存在) - 问题在于安全性,只允许管理员创建源,因此以普通用户身份运行会失败。

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

这导致我建议您需要在代码中创建和写入事件日志,以确保事件日志源是相同的。此外,如果通常写入事件日志,则您不希望能够通过错误配置将其“关闭”。

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

答案 5 :(得分:0)

您可以创建自己的日志库...我做了。

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

答案 6 :(得分:0)

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

是一个非常直接的库,如果你对性能有很高的要求,那就太棒了。