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

时间:2018-01-03 13:29:06

标签: c# .net-core asp.net-core-2.0

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

建议的方法是什么 - 在ASP核心模块的web.config中似乎有一个stdout选项,但不确定是否会提供我需要的信息。另一个选项似乎是在Program.cs中添加单独的日志记录代码,但这感觉就像一个不必要的解决方法,因为可能有更好的默认方式。

1 个答案:

答案 0 :(得分:4)

可以在Program.cs中设置所有日志记录,并建议使用Serilog。来自Serilog.AspNetCore README

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();
}