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
用于记录。 – 至于什么时候做LogInformation
、LogTrace
等,见docs on log levels。
【参考方案1】:
显然,没有分界线何时使用。如果你问自己“目的是什么?”答案恰好是“与系统进程、事件日志或性能计数器交互”,选择System.Diagnostics
。如果答案恰好是“我只想要应用程序日志记录”,那么请选择 Logger
。
对于 Azure Web 应用,您可能希望使用 AddAzureWebAppDiagnostics。
Logging 和 Tracing 的区别?
我保持清醒的方式是Logging
可以帮助您报告任何错误。
但如果您想了解函数的哪个部分导致错误或任何性能瓶颈,请使用Tracing
。 Tracing
有助于了解控制或程序的流程。您可能还希望看到other levels of logging,例如fatal
、warning
、debug
、info
等。
【讨论】:
我想我感到困惑的地方是 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