将 AddNLog 从 .NET Core 2.2 迁移到 3.0

Migrate AddNLog from .NET Core 2.2 to 3.0

在我项目的 Startup class 中,我有以下 Configure 方法:

private void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
    ...
    loggerFactory.AddNLog();
    ...
}

这在 .NET Core 2.2 中工作正常,但升级到 3.0 后,我收到警告 Method 'NLog.Extensions.Logging.ConfigureExtenstions.AddNLog' is obsolete: instead use ILoggingBuilder.AddNLog() or IHostBuilder.UseNLog().

所以我尝试将方法更新为

private void Configure(IApplicationBuilder app, IWebHostEnvironment env, ILoggingBuilder loggingBuilder)
{
    ...
    loggingBuilder.AddNLog();
    ...
}

private void Configure(IApplicationBuilder app, IWebHostEnvironment env, IHostBuilder hostBuilder)
{
    ...
    hostBuilder.UseNLog();
    ...
}

但在这两种情况下我都遇到了 DI 异常:Could not resolve a service of type {Microsoft.Extensions.Logging.ILoggingBuilder/Microsoft.Extensions.Hosting.IHostBuilder} for the parameter {loggingBuilder/hostBuilder} of method 'Configure' on type 'MyProject.Startup'.

我找不到任何关于如何从 .NET Core 3.0 更改 NLog 配置的可行资源,也没有关于登录 official Microsoft guide 的内容。有谁知道如何解决这个问题?

使用 ASP.NET Core 2+,bootstrap 和 ASP.NET Core 站点的模式已更改。 NLog 对此进行了调整。使用最新版本 NLog.Extensions.Logging.ConfigureExtenstions,旧方法已过时。

例如,ASP.NET Core 现在使用 CreateHostBuilder

我建议遵循:

  1. Migrate from ASP.NET Core 2.2 to 3.0 | Microsoft Docs
  2. 然后:Getting started with ASP.NET Core 3 · NLog/NLog Wiki