【问题标题】:System.Diagnostics.Trace vs. ILoggerSystem.Diagnostics.Trace 与 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

标签: c# logging .net-core asp.net-core-webapi


【解决方案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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-18
    相关资源
    最近更新 更多