簡體   English   中英

ASP.NET Core 啟動消息日志

[英]ASP.NET Core startup message log

我有一個 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();
}

我發現了這個問題:

ConfigureWebHostDefaults 和 ConfigureWebHost 方法之間有什么區別?

並掃描了那里鏈接的代碼,但我發現空白。 將 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>();
    });

現在 Kestrel 很好地將它的狀態消息與其他所有內容一起記錄到首選記錄器。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM