.net - ASP.net : How to log from within CreateHostBuilder()?

标签 .net asp.net-core exception logging configuration

我有一个 ASP.net Core 3.1 Web 应用程序。在 Program.cs 类中,我实现了类似这样的 CreateHostBuilder() 静态方法:

public static IHostBuilder CreateHostBuilder(string[] args) =>
    Host
        .CreateDefaultBuilder(args)
        .ConfigureAppConfiguration((context, config) =>
        {
            try 
            {
                // do some configuration work that might fail
            }
            catch (Exception ex)
            {
                // how can I write to a log from here?
            }
        })
        .ConfigureWebHostDefaults(webBuilder =>
        {
            webBuilder.UseStartup<Startup>();
        });
}

如果在配置应用程序时抛出异常,当我捕获它时如何使用 ILogger 记录它?

最佳答案

微软的“Logging in .NET Core and ASP.NET Core”文档文章说:

Logging during host construction isn't directly supported. However, a separate logger can be used.

他们继续使用 Serilog 给出这个例子:

public static IHostBuilder CreateHostBuilder(string[] args)
{
    var builtConfig = new ConfigurationBuilder()
        .AddJsonFile("appsettings.json")
        .AddCommandLine(args)
        .Build();

    Log.Logger = new LoggerConfiguration()
        .WriteTo.Console()
        .WriteTo.File(builtConfig["Logging:FilePath"])
        .CreateLogger();

    try
    {
        return Host.CreateDefaultBuilder(args)
            .ConfigureServices((context, services) =>
            {
                services.AddRazorPages();
            })
            .ConfigureAppConfiguration((hostingContext, config) =>
            {
                config.AddConfiguration(builtConfig);
            })
            .ConfigureLogging(logging =>
            {   
                logging.AddSerilog();
            })
            .ConfigureWebHostDefaults(webBuilder =>
            {
                webBuilder.UseStartup<Startup>();
            });
    }
    catch (Exception ex)
    {
        Log.Fatal(ex, "Host builder error");

        throw;
    }
    finally
    {
        Log.CloseAndFlush();
    }
}

关于.net - ASP.net : How to log from within CreateHostBuilder()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64152220/

相关文章:

c# - 以像素为单位获取字体指标

c# - 使用 .NET Core 2.1 的托管 C++

java - jacorb 中的 InvalidName 异常

c# - ASP.NET Core System.UnauthorizedAccessException : Access to the path 'C:\..." is denied

javascript - 最终 block 中的return语句

Scala - 链接 future 尝试区 block ?

.net - 哪些技术适用于可通过 http 访问数据库的 Windows 数据库应用程序

c# - VTK ActiViz 将对象重置为原始 View

c# - 控制台应用程序宿主wcf服务交互

c# - .Net Core 2 OpenID Connect 身份验证和多重身份