【问题标题】:Why everyone using logger packages with ILogger of ASP.Net Core?为什么每个人都使用带有 ASP.Net Core 的 ILogger 的记录器包?
【发布时间】:2020-07-08 06:30:13
【问题描述】:

对于日志记录,开发人员使用日志记录包,例如:Nlog、SeriLog、... 而asp.net核心有Microsoft.Extenstions.Logging.ILogger

不是ILogger的asp.net core记录日志吗?

如果ILogger 可以记录日志,不使用任何其他包不是更好吗? 如果ILogger可以记录日志,那为什么开发者不单独使用呢?

如果ILogger 不能单独记录日志而其他包可以,那么ILogger 与其他日志包一起使用而不是单独使用一个日志包有什么好处?

【问题讨论】:

  • ILogger 只是一个接口。您可以使用框架自己的接口,但是您的应用程序会“锁定”到这些接口。这意味着,稍后更改日志框架需要付出很大的努力。如果您使用 MS ILogger 接口,您可以通过任何适合您要求的框架轻松支持它,并在以后轻松更改它,因为您需要更改的是依赖注入配置中的一些行并创建合适的记录器配置.
  • 例如,虽然 ILogger 是围绕结构化日志设计的 [Log.LogDebug("MyVar is {Something}", myVar) vs Log.LogDebug($"MyVar is {myVar}")],但它实际上并不支持它(本质上是执行字符串格式)。您可以采用支持结构化日志记录的框架(例如 Serilog)并使用它返回ILogger,而无需更改您正在编码的接口。

标签: c# asp.net-core logging


【解决方案1】:

默认情况下 ASP.NET Core 使用 Microsoft.Extensions.Logging.ILogger

因此调用 CreateDefaultBuilder,它会添加以下日志记录提供程序:

  • 控制台
  • 调试
  • 事件源
  • 事件日志:仅限 Windows

代码示例:

Host.CreateDefaultBuilder(args)
    .ConfigureWebHostDefaults(webBuilder =>
                 {
                     webBuilder.UseStartup<Startup>();
                 });

来源:https://docs.microsoft.com/en-us/aspnet/core/fundamentals/logging/?view=aspnetcore-3.1

所以一般来说每个项目都有自己的需求和需求,所以开发者可以选择哪个更适合项目需求。 其他记录器提供商,如 Nlog、SeriLog、Asure、... 可以提供不同的日志主题、灵活的配置、登录到文件等默认ASP.NET Core不具备的功能。 ILogger 和 ILoggerProvider 接口和附加包的安装可以灵活地添加其他记录器提供程序。

ILoggerProvider 接口 https://docs.microsoft.com/en-us/dotnet/api/microsoft.extensions.logging.iloggerprovider?view=dotnet-plat-ext-3.1

希望我能得到很好的回答。

【讨论】:

  • 感谢您的回答。那么 asp.net 核心没有本机记录器可以在没有任何包的情况下使用?为此,我们要么使用日志包,要么编写自定义日志框架。我是对的?
  • 欢迎您,AspNetCore 提供了控制台日志,所以您需要安装或编写自己的包。
【解决方案2】:

来自https://docs.microsoft.com/en-us/aspnet/core/fundamentals/logging/?view=aspnetcore-3.1

.NET Core 支持与各种内置和第三方日志记录提供程序一起使用的日志记录 API。本文介绍了如何将日志记录 API 与内置提供程序一起使用。

这为您提供了灵活性和附加功能。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-06-02
    • 1970-01-01
    • 1970-01-01
    • 2011-03-09
    • 1970-01-01
    • 2016-11-10
    • 1970-01-01
    相关资源
    最近更新 更多