System.Diagnostics.Trace 与 ILogger

Posted

技术标签:

【中文标题】System.Diagnostics.Trace 与 ILogger【英文标题】:System.Diagnostics.Trace vs. ILogger 【发布时间】:2020-04-19 11:56:46 【问题描述】:

我对使用 System.Diagnostics.Trace Trace.TraceInformation("This is a test") 和使用 ILogger 日志记录抽象 logger.LogInformation("This is a test") 之间的区别感到困惑。

我正在从事一个 .Net Core 2.2 项目,并计划将其部署为 Azure Web 应用程序。两种方法有区别吗?一个比另一个更适合我正在做的事情吗?为什么一个人会使用一个而不是另一个?

【问题讨论】:

这个question 11 岁了,但我认为前几个答案仍然适用。 Logging in .NET Core and ASP.NET Core。您基本上想要记录,而不是使用诊断跟踪。如果您需要诊断跟踪,还有一个TraceSourceLoggerProvider 用于记录。 – 至于什么时候做LogInformationLogTrace等,见docs on log levels。 【参考方案1】:

显然,没有分界线何时使用。如果你问自己“目的是什么?”答案恰好是“与系统进程、事件日志或性能计数器交互”,选择System.Diagnostics。如果答案恰好是“我只想要应用程序日志记录”,那么请选择 Logger

对于 Azure Web 应用,您可能希望使用 AddAzureWebAppDiagnostics。

Logging 和 Tracing 的区别?

我保持清醒的方式是Logging 可以帮助您报告任何错误。

但如果您想了解函数的哪个部分导致错误或任何性能瓶颈,请使用TracingTracing 有助于了解控制或程序的流程。您可能还希望看到other levels of logging,例如fatalwarningdebuginfo 等。

【讨论】:

我想我感到困惑的地方是 Logging 有一个Trace 级别。那么logger.Log(LogLevel.Trace, "Here is a trace message")Trace.TraceInformation("Here is a trace message")有什么区别呢? @RHarris:更新了答案。【参考方案2】:

主要区别在于ILogger 不是框架的一部分(netstandard 或 .NET 5+),它是更高级别的日志/跟踪框架。 System.Diagnostics 是 .NET 框架的一部分,开箱即用。

其他区别是ILogger可以与依赖注入一起使用。

还有this

【讨论】:

以上是关于System.Diagnostics.Trace 与 ILogger的主要内容,如果未能解决你的问题,请参考以下文章

System.Diagnostics.Trace 与 ILogger

一些调试程序的小技巧

非控制台应用程序输出信息到输出面板

跟踪日志位置,在哪里查看它们

与 Azure Application Insights、ASP.NET MVC 和 NLog 的活动关联

从托管为 Azure Web App 的 ASP.NET 5 应用程序记录日志