在C#中记录错误

时间:2020-03-06 14:51:39  来源:igfitidea点击:

我正在从C ++编码转换为C#。我需要用C#中的类似内容替换我的C ++错误记录/报告宏系统。

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

LOGERR(" Some error");
或者
LOGERR("输入%s和%d出现错误",stringvar,intvar);

然后,宏和支持库代码将(可能是varargs)格式化的消息以及源文件,源代码行,用户名和时间传递到数据库中。相同的数据也填充到数据结构中,以便以后向用户报告。

是否有人有Ccode代码段或者指向进行此基本错误报告/记录的示例的指针?

编辑:在我问这个问题的时候,我真的是.NET的新手,并且不知道System.Diagnostics.Trace。当时我需要System.Diagnostics.Trace。从那时起,我就在日志记录需求更大且更为复杂的项目上使用了log4net。只需编辑500行XML配置文件,log4net将完成我们将需要的所有事情:)

解决方案

即使我个人讨厌它,log4net似乎也是堵塞的事实上的标准。用法示例:

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

我强烈建议我们查看log4Net。这篇文章涵盖了我们入门的大部分内容。

Log4Net是一个相当全面的日志记录框架,它允许我们记录到不同级别(调试,错误,严重)并将这些日志语句输出到可能不同的位置(滚动文件,Web服务,Windows错误)

通过创建记录器的实例,我可以轻松地在任何地方登录

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

然后记录错误。

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

企业库是log4net的可靠替代品,它还提供了许多其他功能(缓存,异常处理,验证等)。我几乎在我构建的每个项目中都使用它。

强烈推荐。

与log4net相同。我添加我的两位是因为对于实际使用,有必要查看一些开源实现,以查看带有一些方便添加的真实世界代码示例。对于log4net,我建议先抬头看一下潜台词。特别要看一下应用程序的start和assemblyinfo位。

另一个不错的日志记录库是NLog,它可以记录到许多不同的地方,例如文件,数据库,事件记录器等。

这里有许多log4net倡导者,因此我敢肯定这将被忽略,但是我将添加自己的偏好:

System.Diagnostics.Trace

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

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

除了关于使用System.Diagnostics方法进行日志记录的几条评论之外,我还想指出,除非需要,否则DebugView工具非常整洁,可以在需要时检查调试输出,除非我们需要它。应用程序以生成日志文件,我们只需在需要时启动DebugView。

正如其他人所说,Log4Net非常普遍,与Log4j相似,如果我们使用过Java,它将对我们有所帮助。

我们还可以选择使用"日志记录应用程序块" http://www.codeproject.com/KB/architecture/GetStartedLoggingBlock.aspx

我们可以使用内置的.NET日志记录。查看TraceSource和TraceListeners,可以在.config文件中对其进行配置。

我使用The Object Guy的日志记录框架-大多数尝试过它的人也是如此。这个家伙对此有一些有趣的评论。

就像我在另一个主题中所说的那样,几年来我们一直在多个生产应用程序中使用The Object Guy的Logging Framework。它非常易于使用和扩展。

.NET Framework中System.Diagnostics中的内置跟踪很好,我在许多应用程序中都使用了它。但是,我仍然使用log4net的主要原因之一是内置的.NET Framework跟踪缺少log4net已经提供的内置的许多有用的功能齐全的添加程序。

例如,除了在VB.NET dll中确实没有一个功能齐全的功能之外,.NET Framework中确实没有定义一个好的滚动文件跟踪侦听器。

根据开发环境,除非没有第三方工具,否则我建议使用log4net,然后说要使用System.Diagnostics跟踪类。如果我们确实需要更好的appender / tracelistener,则可以随时自己实现。

例如,许多客户要求我们在将其安装在公司计算机上时不要使用开放源代码库,因此,.NET Framework跟踪类非常适合。

另外,http://www.postsharp.org/是我正在寻找的AOP库,它也可以帮助记录代码,如代码项目中所示:http://www.codeproject.com/KB/dotnet/log4postsharp-intro .aspx。