C# 在ASP.NET Core 2中初始化记录器服务之前记录异常的正确方法

C# 在ASP.NET Core 2中初始化记录器服务之前记录异常的正确方法,c#,.net-core,asp.net-core-2.0,C#,.net Core,Asp.net Core 2.0,我们正在使用连接到Graylog的Serilog来管理日志记录,这对于运行时问题非常有效,但我们遇到的问题是,该服务在Startup.cs中初始化,而在Program.cs中不可用,我们可能会在那里得到一个错误(IIS显示从Kestrel返回的500,但我们的日志中没有任何内容) 处理这个问题的推荐方法是什么?ASP核心模块的web.config中似乎有一个stdout选项,但不确定这是否会提供我需要的信息。另一个选项似乎是在Program.cs中添加一个单独的日志代码,但这似乎是一个不必要的解

我们正在使用连接到Graylog的Serilog来管理日志记录,这对于运行时问题非常有效,但我们遇到的问题是,该服务在
Startup.cs
中初始化,而在
Program.cs
中不可用,我们可能会在那里得到一个错误(IIS显示从Kestrel返回的500,但我们的日志中没有任何内容)


处理这个问题的推荐方法是什么?ASP核心模块的
web.config
中似乎有一个stdout选项,但不确定这是否会提供我需要的信息。另一个选项似乎是在
Program.cs
中添加一个单独的日志代码,但这似乎是一个不必要的解决方法,因为可能有更好的默认方法。

可以在
Program.cs
中设置所有日志,建议使用Serilog。从:

公共类程序
{
公共静态int Main(字符串[]args)
{
Logger.Logger=新的LoggerConfiguration()
.MinimumLevel.Debug()
.MinimumLevel.Override(“Microsoft”,LogEventLevel.Information)
.Enrich.FromLogContext()的
.WriteTo.Console()
.CreateLogger();
尝试
{
日志信息(“启动web主机”);
BuildWebHost(args.Run();
返回0;
}
捕获(例外情况除外)
{
Log.Fatal(例如,“主机意外终止”);
返回1;
}
最后
{
Log.CloseAndFlush();
}
}
公共静态IWebHost BuildWebHost(字符串[]args)=>
WebHost.CreateDefaultBuilder(args)
.UseStartup()
.useserlog()
.Build();
}

可以设置所有登录
程序.cs
,建议使用Serilog。从:

公共类程序
{
公共静态int Main(字符串[]args)
{
Logger.Logger=新的LoggerConfiguration()
.MinimumLevel.Debug()
.MinimumLevel.Override(“Microsoft”,LogEventLevel.Information)
.Enrich.FromLogContext()的
.WriteTo.Console()
.CreateLogger();
尝试
{
日志信息(“启动web主机”);
BuildWebHost(args.Run();
返回0;
}
捕获(例外情况除外)
{
Log.Fatal(例如,“主机意外终止”);
返回1;
}
最后
{
Log.CloseAndFlush();
}
}
公共静态IWebHost BuildWebHost(字符串[]args)=>
WebHost.CreateDefaultBuilder(args)
.UseStartup()
.useserlog()
.Build();
}

似乎就是这样-不确定我为什么错过了它。谢谢!这似乎是它-不知道为什么我错过了它。谢谢!
public class Program
{
    public static int Main(string[] args)
    {
        Log.Logger = new LoggerConfiguration()
            .MinimumLevel.Debug()
            .MinimumLevel.Override("Microsoft", LogEventLevel.Information)
            .Enrich.FromLogContext()
            .WriteTo.Console()
            .CreateLogger();

        try
        {
            Log.Information("Starting web host");
            BuildWebHost(args).Run();
            return 0;
        }
        catch (Exception ex)
        {
            Log.Fatal(ex, "Host terminated unexpectedly");
            return 1;
        }
        finally
        {
            Log.CloseAndFlush();
        }
    }

    public static IWebHost BuildWebHost(string[] args) =>
        WebHost.CreateDefaultBuilder(args)
        .UseStartup<Startup>()
            .UseSerilog()
            .Build();
}