在C#中logging错误

我正在从C ++编码切换到C#。 我需要用C#中类似的东西来replace我的C ++错误logging/报告macros系统。

在我的C ++源代码中,我可以写

LOGERR(“有些错误”); 或LOGERR(“错误与input%s和%d”,stringvar,intvar);

macros和支持库代码然后将(可能是可变长度)格式的消息与源文件,源代码行,用户名和时间一起传递到数据库中。 同样的数据也被塞入到数据结构中,以便稍后向用户报告。

有没有人有C#代码片段或指针来做这个基本的错误报告/日志logging的例子?

编辑:当时我问这个问题,我真的是新的.NET,并不知道System.Diagnostics.Trace。 System.Diagnostics.Trace是我当时需要的。 从那以后,我在log日志需求更大,更复杂的项目上使用了log4net。 只需编辑500行XMLconfiguration文件和log4net将做你会需要的一切:)

在这里有很多log4net的支持者,所以我相信这将被忽略,但我会添加自己的偏好:

System.Diagnostics.Trace 

这包括侦听Trace()方法的侦听器,然后写入日志文件/输出窗口/事件日志,框架中包含的是DefaultTraceListenerTextWriterTraceListenerEventLogTraceListener 。 它允许您指定级别(警告,错误,信息)和类别。

跟踪类在MSDN上
写入Web应用程序中的事件日志
UdpTraceListener – 将log4net兼容的XML消息写入日志查看器(如log2console)

我强烈build议看看log4Net 。 这篇文章涵盖了大部分你需要开始。

另一个好的日志库是Nlog ,它可以login到很多不同的地方,比如文件,数据库,事件logging器等等。

我使用“对象家伙的logging框架” – 大多数人都是这样做的。 这家伙有一些有趣的评论 。

企业库是log4net的可靠替代品,它还提供了一堆其他function(caching,exception处理,validation等)。 我用它来创build每个项目。

强烈推荐。

即使我个人讨厌它, log4net似乎是C#日志事实上的标准。 示例用法:

 log4net.ILog log = log4net.LogManager.GetLogger(typeof(Program)); log.Error(“Some error”); log.ErrorFormat("Error with inputs {0} and {1}", stringvar, intvar); 

正如我在另一个线程中所说的,我们已经在多个生产应用中使用了Object Guy的Logging Framework多年。 这是非常容易使用和扩展。

Log4Net是一个相当全面的日志框架,它允许你login到不同的级别(Debug,Error,Fatal)并将这些日志语句输出到不同的地方(滚动文件,Web服务,Windows错误)

我可以通过创buildlogging器的实例轻松login任何地方

 private static readonly ILog _log = LogManager.GetLogger(typeof([Class Name])); 

然后logging错误。

 _log.Error("Error messsage", ex); 

塞里洛克迟到了这里的派对,但带来了一些有趣的select。 它看起来很像传统的基于文本的logging器来使用:

 Log.Information("Hello, {0}", username); 

但是,与早期的框架不同的是,它仅在写文本时将消息和参数呈现为string,例如文件或控制台。

这个想法是,如果你使用“NoSQL”风格的数据存储日志,你可以logging事件如:

 { Timestamp: "2014-02-....", Message: "Hello, nblumhardt", Properties: { "0": "nblumhardt" } } 

.NET格式string语法被扩展,所以你可以写上面的例子:

 Log.Information("Hello, {Name}", username); 

在这种情况下,该属性将被称为Name (而不是0 ),使查询和关联更容易。

已经有一些很好的存储选项。 MongoDB和Azure Table Storage似乎对于DIY来说非常stream行。 我最初build立了Serilog(虽然它是一个社区项目),而我现在正在研究一个名为Seq的产品,它提供了对这些结构化日志事件的存储和查询。

您可以使用内置的.NET日志logging。 看看TraceSource和TraceListeners,它们可以在.config文件中configuration。

同上log4net。 我添加了两位,因为在实际使用中,查看一些开源实现来查看真实世界的代码示例并添加一些便利是有意义的。 对于log4net,我build议在我的头顶上看潜台词 。 特别看看应用程序的开始和程序集信息位。

除了使用System.Diagnostics方法进行日志logging的一些注释外,我还想指出, DebugView工具非常适合在需要时检查debugging输出 – 除非您需要,否则不需要生成日志文件的应用程序,只需在需要时启动DebugView即可。

System.Diagnostics中的内置跟踪在.NET Framework中很好,我在很多应用程序中使用它。 然而,我仍然使用log4net的主要原因之一是内置的.NET框架跟踪缺乏许多log4net内置的有用的全functionappender。

例如,在.NET Framework中定义的滚动文件跟踪监听器实际上并不是全function的。

根据你的开发环境,我build议使用log4net除非第三方工具不可用,那么我会说使用System.Diagnostics跟踪类。 如果你真的需要更好的appender / tracelistener,你可以随时自己实现。

例如,许多客户要求我们在公司机器上安装时不要使用开放源代码库,所以在这种情况下,.NET框架的跟踪类是非常合适的。

此外 – http://www.postsharp.org/是一个AOP库,我正在研究,也可能有助于在代码项目上展示的日志logging:; http : //www.codeproject.com/KB/dotnet/log4postsharp- intro.aspx 。

ExceptionLess是可用于日志logging的最简单的nuget软件包之一。 它是一个开源项目。 它会自动处理未处理的exception,并提供手动日志选项。 您可以在本地服务器上login到在线或自己的主机 。

正如其他人所说,Log4Net与Log4j相当常见和相似,如果您使用任何Java,Log4j将会帮助您。

您还可以select使用日志logging应用程序块http://www.codeproject.com/KB/architecture/GetStartedLoggingBlock.aspx