题
我正在从C ++编码切换到C#。我需要用C#中类似的东西替换我的C ++错误记录/报告宏系统。
在我的C ++源代码中,我可以编写
LOGERR(“一些错误”); 要么 LOGERR(“输入%s和%d的错误”,stringvar,intvar);
宏观&支持库代码然后将(可能是varargs)格式化的消息与源文件,源代码行,用户名和时间一起传递到数据库中。相同的数据也被填充到数据结构中,以便以后向用户报告。
是否有人拥有C#代码段或指向执行此基本错误报告/记录的示例的指针?
编辑:当我问这个问题时,我对.NET很陌生,并且不知道System.Diagnostics.Trace。 System.Diagnostics.Trace是我当时需要的。从那以后,我在日志记录要求更大,更复杂的项目中使用了log4net。只需编辑500行XML配置文件,log4net即可完成您所需的一切:)
解决方案
这里有很多log4net的倡导者,所以我相信这会被忽略,但我会添加自己的偏好:
System.Diagnostics.Trace
这包括侦听 Trace()
方法的侦听器,然后写入日志文件/输出窗口/事件日志,框架中包含的是 DefaultTraceListener 代码>,
TextWriterTraceListener
和 EventLogTraceListener
。它允许您指定级别(警告,错误,信息)和类别。
MSDN上的跟踪课程
写入Web应用程序中的事件日志
UdpTraceListener - 将log4net兼容的XML消息写入日志查看器例如log2console
其他提示
另一个好的日志记录库是 NLog ,它可以登录到很多不同的地方,例如文件,数据库,事件记录器等。
我使用对象家伙的日志记录框架 - 大多数人都会尝试使用它。这个人有一些有趣的评论。
即使我个人讨厌它, log4net 似乎也是事实上的标准用于C#日志记录。样品用法:
log4net.ILog log = log4net.LogManager.GetLogger(typeof(Program));
log.Error(“Some error”);
log.ErrorFormat("Error with inputs {0} and {1}", stringvar, intvar);
正如我在另一篇帖子中所说,我们一直在使用对象家伙的日志记录框架生产应用程序已有好几年了它非常易于使用和扩展。
Log4Net 是一个相当全面的日志框架,可以让您登录到不同的级别(Debug ,Error,Fatal)并将这些日志语句输出到不同的地方(滚动文件,Web服务,Windows错误)
我可以通过创建记录器实例轻松记录任何地方
private static readonly ILog _log = LogManager.GetLogger(typeof([Class Name]));
然后记录错误。
_log.Error("Error messsage", ex);
Serilog 在这里参加派对的时间较晚,但会带来一些有趣的选项。它看起来很像基于文本的经典记录器:
Log.Information("Hello, {0}", username);
但是,与早期的框架不同,它只在编写文本时将消息和参数呈现为字符串,例如到文件或控制台。
这个想法是,如果您使用'NoSQL'风格的数据存储来存储日志,您可以记录以下事件:
{
Timestamp: "2014-02-....",
Message: "Hello, nblumhardt",
Properties:
{
"0": "nblumhardt"
}
}
扩展了.NET格式字符串语法,因此您可以将上面的示例编写为:
Log.Information("Hello, {Name}", username);
在这种情况下,该属性将被称为 Name
(而不是 0
),使查询和关联更容易。
已经有一些很好的存储选择。 MongoDB和Azure Table Storage似乎非常受DIY欢迎。我最初建立了Serilog(虽然它是一个社区项目),我现在正在研究一种名为 Seq 的产品,它提供存储并查询这些结构化的日志事件。
您可以使用内置的.NET日志记录。查看TraceSource和TraceListeners,可以在.config文件中配置它们。
同样适用于log4net。我正在添加我的两位,因为在实际使用中,查看一些开源实现以查看带有一些方便添加的真实世界代码示例是有意义的。对于log4net,我建议不要考虑子文字。特别是看看应用程序的启动和汇编信息位。
除了对使用System.Diagnostics方法进行日志记录的几条评论之外,我还想指出 DebugView 工具非常适合在需要时检查调试输出 - 除非您需要它,否则应用程序无需生成日志文件,您只需启动在需要时调试DebugView。
System.Diagnostics中的内置跟踪在.NET Framework中很好用,我在许多应用程序中使用它。但是,我仍然使用log4net的主要原因之一是内置的.NET Framework跟踪缺少log4net已经内置的许多有用的全功能appender。
例如,在.NET Framework中定义的滚动文件跟踪侦听器确实没有在VB.NET dll中定义的那个,这实际上不是全部功能。
根据您的开发环境,我建议使用log4net,除非第三方工具不可用,然后我会说使用System.Diagnostics跟踪类。如果你真的需要一个更好的appender / tracelistener,你可以自己实现它。
例如,我们的许多客户要求我们在公司机器上安装时不使用开源库,因此在这种情况下,.NET Framework跟踪类非常适合。
此外 - http://www.postsharp.org/ 是我正在寻找的AOP库这也可以帮助记录代码项目中的日志: http:// www.codeproject.com/KB/dotnet/log4postsharp-intro.aspx 。
ExceptionLess 是可用于记录的最简单的nuget包之一。它是一个开源项目。它会自动处理未处理的异常,并且可以使用手动日志的选项。您可以在本地服务器上登录或自我主持人。
正如其他人所说,Log4Net相当常见,与Log4j类似,如果您使用任何Java,它将为您提供帮助。
您还可以选择使用日志记录应用程序块 http:// www。 codeproject.com/KB/architecture/GetStartedLoggingBlock.aspx