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

时间:2019-11-06 00:06:26

标签: c# service .net-core

我正在将以下有效的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”。

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

1 个答案:

答案 0 :(得分:1)

参考App startup in ASP.NET Core

  

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

     
      
  • IWebHostEnvironment
  •   
  • IHostEnvironment
  •   
  • IConfiguration
  •   

虽然链接的public Startup(ILoggerFactory loggerFactory) { this._Factory = loggerFactory; this._Logger = loggerFactory.CreateLogger<Startup>(); } 似乎在允许的服务范围之外注入。

Startup

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

我建议从Startup构造函数中删除 @SqlQuery("SELECT DISTINCT organisation.id, organisation.name, organisation.type, " + " organisation.logo_asset_id,organisation.address, organisation.status, count(s) " + "FROM organisation " + " LEFT JOIN channel c on organisation.id = c.organisation_id " + " LEFT JOIN show s on c.id = s.channel_id " + " WHERE (<selected_tags>) && s.tags " + " GROUP BY organisation.id, organisation.name, organisation.type, " + " organisation.logo_asset_id,organisation.address, organisation.status " + " ORDER BY count(s) DESC " + " LIMIT (:limit) OFFSET (:offset);") List<Organisation> findByTags(@BindIn("selected_tags") List<String> tags, @Bind("limit") int limit, @Bind("offset") int offset); 的注入,作为对框架的较新版本进行重构的一部分。

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