ASP.NET Core启动消息日志

问题描述

我有一个ASP.NET Core 3.1应用程序,该应用程序是从ASP.NET Core 2.0升级的。我们希望获得旧的启动消息(“正在监听:http:// localhost:5000”等)以通过配置的结构化日志记录选项进行日志记录。这对于新的3.1项目来说是开箱即用的,但是我无法弄清楚如何在启动时不使用ConfigureWebHostDefaults()方法的现有项目中启用它。例如,这通过结构化日志记录启动日志:

public static void Main(string[] args)
{
    CreateHostBuilder(args).Build().Run();
}

public static IHostBuilder CreateHostBuilder(string[] args) =>
    Host.CreateDefaultBuilder(args)
        .ConfigureWebHostDefaults(webBuilder =>
        {
            webBuilder.UseStartup<Startup>();
        });

但这不是:

public static void Main(string[] args)
{
    new WebHostBuilder()
        .UseKestrel()
        .ConfigureLogging((hostingContext,logging) =>
        {
            logging.AddDebug();
            logging.AddConsole();
        })
        .UseStartup<Startup>()
        .Build()
        .Run();
}

我发现了这个问题:

What is the difference between ConfigureWebHostDefaults and ConfigureWebHost methods?

并扫描了链接在那里的代码,但是我空白了。将Kestrel连接到日志记录基础架构的魔咒是什么?

解决方法

最后,我们只需要完全切换到新的主机生成器(CreateHostBuilder到旧的CreateWebHostBuilder)即可。我们之前曾尝试过,但是在ConfigureLogging中添加自定义日志记录提供程序时,我们最终得到了重复的日志消息,因此在不完全了解其区别的情况下,我们回滚到了旧方法。丢失的位正在呼叫ClearProviders()。以前,我们有:

public static void Main(string[] args)
{
    CreateWebHostBuilder(args).Build().Run();
}

public static IWebHostBuilder CreateWebHostBuilder(string[] args) => WebHost.CreateDefaultBuilder(args)
    .UseKestrel()
    .ConfigureAppConfiguration((context,config) => { ... }))
    .ConfigureLogging((hostingContext,logging) =>
    {
        logging.AddConfiguration(hostingContext.Configuration.GetSection("Logging"));

        logging.AddProvider(new CustomLoggerProvider());
        logging.AddDebug();
    })
    .UseStartup<Startup>();

现在:

public static void Main(string[] args)
{
     CreateHostBuilder(args).Build().Run();
}

public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args)
    .ConfigureAppConfiguration((hostingContext,config) => { ... } ))
    .ConfigureLogging((hostBuilder,logging) =>
    {                
        logging.ClearProviders();

        logging.AddConfiguration(hostBuilder.Configuration.GetSection("Logging"));

        logging.AddProvider(new CustomLoggerProvider());
        logging.AddDebug();
    })
    .ConfigureWebHostDefaults(webBuilder =>
    {
        webBuilder.UseStartup<Startup>();
    });

现在,红est将其状态消息以及其他所有信息记录到首选记录器中。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...