我如何在通过Host.CreateDefaultBuilder装载的Web主机中配置日志记录

问题描述 投票:0回答:1

我正在将以下有效的WebHost.CreateDefaultBuilder方法改编为基于Host.CreateDefaultBuilder的方法,以便可以使用UseWindowsService extension method

// WORKING
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
  WebHost.CreateDefaultBuilder(args)
    .ConfigureLogging((hostingContext, logging) =>
    {
      ...
    })
    .UseStartup<Startup>();
}

当我尝试适应此问题时...

public static IHostBuilder CreateHostBuilder(string[] args) =>
  Host.CreateDefaultBuilder(args)
    .UseWindowsService()
    .ConfigureLogging((hostingContext, logging) =>
    { // tried here
      ...
    })
    .ConfigureWebHostDefaults(webBuilder =>
    {
      webBuilder.ConfigureLogging((hostingContext, logging) =>
        { // tried here too
          ...
        });
        .UseStartup<Startup>();
    });

我收到以下错误...

无法解析类型的服务尝试执行'Microsoft.Extensions.Logging.ILoggerFactory'激活“ MyProject.Startup”。

在此处设置日志记录的适当方法是什么?

c# service .net-core
1个回答
0
投票

参考App startup in ASP.NET Core

[以下服务类型只能注入Startup使用通用主机(IHostBuilder)时的构造函数:

  • IWebHostEnvironment
  • IHostEnvironment
  • IConfiguration

虽然您链接的Startup似乎在允许的服务范围之外注入。

public Startup(ILoggerFactory loggerFactory)
{
  this._Factory = loggerFactory;
  this._Logger = loggerFactory.CreateLogger<Startup>();
}

基于链接的Startup代码,似乎未使用该记录器,并且注释掉了对该记录器的一个引用,因为基于使用该记录器的上下文,不需要它。

[我建议从ILoggerFactory构造函数中删除Startup的注入,作为对框架的较新版本的重构的一部分。

原始示例代码提供的所有其他内容似乎都遵循文档中建议的格式,并且应该可以正常工作。

© www.soinside.com 2019 - 2024. All rights reserved.