C # 中的日志记录错误

我正在从用 C + + 编码转换到用 C # 编码。我需要用类似于 C # 的东西替换我的 C + + 错误日志/报告宏系统。

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

LOGERR (“一些错误”) ; 或者 LOGERR (“输入% s 和% d 的错误”,stringvar,intvar) ;

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

是否有人有 C # 代码片段或示例指针来执行这个基本的错误报告/日志记录?

编辑: 当时我问这个问题的时候,我还是个新手。NET,并且不知道系统。诊断。崔思。系统。诊断。我当时需要的就是痕迹。从那时起,我在日志需求更大、更复杂的项目中使用 log4net。只需编辑500行的 XML 配置文件,log4net 就可以满足您的所有需求:)

92538 次浏览

尽管我个人很讨厌它,但是 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。这个 邮寄涵盖了你需要开始的大部分内容。

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

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

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

然后记录错误。

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

Enterprise Library Log4net的可靠替代品,它还提供了一系列其他功能(缓存、异常处理、验证等等)。.).我几乎在每个项目中都使用它。

强烈推荐。

Log4net 也是如此。我之所以添加这两个部分,是因为对于实际使用来说,查看一些开放源码实现来查看具有一些便利添加的实际代码示例是有意义的。对于 log4net,我建议立即查看 潜台词。特别是看看应用程序的开始和汇编信息位。

另一个好的日志库是 NLog,它可以将日志记录到很多不同的地方,比如文件、数据库、事件日志记录器等。

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

System.Diagnostics.Trace

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

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

继有关使用该系统的几点意见之后。用于日志记录的诊断方法,我还想指出的是,调试视图工具非常简洁,可以在需要时检查调试输出——除非你需要它,否则不需要应用程序生成日志文件,只需在需要时启动 DebugView。

正如其他人所说,Log4Net 非常常见,并且类似于 Log4j,如果您使用任何 Java,它将为您提供帮助。

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

你可以使用内置的。NET 日志记录。查看 TraceSource 和 TraceListener,它们可以在。配置文件。

我使用的是 对象人的日志框架——大多数人都是这样做的。这个家伙有一些有趣的 评论

正如我在另一个帖子中所说,我们已经在多个生产应用程序中使用 对象人的日志框架好几年了。它非常容易使用和扩展。

系统中的内建跟踪。诊断在。NET 框架,我在许多应用程序中使用它。然而,我仍然使用 log4net 的主要原因之一是内置的。NET Framework 跟踪缺乏 log4net 已经内置的许多有用的全功能附加器。

例如,在。NET 框架,而不是 VB.NET dll 中的框架,后者的功能并不全面。

根据您的开发环境,我建议使用 log4net,除非第三方工具不可用,那么我建议使用 System。诊断跟踪类。如果你真的需要一个更好的 appender/tracelistener,你可以自己实现它。

例如,我们的许多客户要求我们在安装到他们的公司机器上时不使用开源库,因此在这种情况下。NETFramework 跟踪类非常适合。

另外-http://www.postsharp.org/是我正在研究的一个 AOP 库,它可能也有助于日志记录,如代码项目: http://www.codeproject.com/KB/dotnet/log4postsharp-intro.aspx所示。

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 表存储似乎在 DIY 中非常流行。我最初构建了 Serilog (尽管它是一个社区项目) ,现在我正在开发一个名为 续集的产品,它提供对这类结构化日志事件的存储和查询。

ExceptionLess 是可用于日志记录的最简单的 nuget 包之一。这是一个 开源项目。它自动处理未处理的异常,并且可以使用 手动记录的选项。您可以在本地服务器上登录到联机或 自我主持