配置了“日志级别”后,Serilog是否自动捕获日志

时间:2019-03-28 03:25:19

标签: c# logging asp.net-core serilog

我是第一次使用Serilog,并试图弄清楚它是如何工作的。我正在看一个配置了Serilog的示例ASP.Net Core应用程序。 serilog配置正在从Appsettings.json中读取:

"Serilog": {
    "ApplicationName": "app-name",
    "Using": [ "Serilog.Sinks.File" ],
    "MinimumLevel": "Verbose",
    "WriteTo": [
        {
            "Name": "RollingFile",
            "Args": { "pathFormat": "log-{Date}.log" }
        }
    ]
}

在“启动”中定义Log对象,在“ ConfigureServices ”方法中定义“ AddSerilog ”。但是除此之外,不存在其他日志信息。但是,当我运行应用程序时,Solution目录中会自动生成日志文件。

问题是Serilog是否会自动创建那些日志文件?

1 个答案:

答案 0 :(得分:2)

AddSerilog中对ConfigureServices的调用向Microsoft的ILoggingBuilder注册了日志记录提供程序。此提供程序(SerilogLoggerProvider)实现ILoggerProvider及其CreateLogger方法,如下所示:

public ILogger CreateLogger(string name)
{
    return new SerilogLogger(this, _logger, name);
}

从此代码中可以清楚地看出,Serilog的SerilogLogger实现了Microsoft的ILogger接口。

当ASP.NET Core框架需要创建记录器对象时,它使用ILoggerProvider的实现通过调用ILogger来创建CreateLogger的实例。使用已注册的Serilog提供程序,最终以ASP.NET Core请求ILogger的实例并接收SerilogLogger的实例,这提供了ASP.NET Core与Serilog之间的桥梁。 / p>

无论何时发出日志事件,RollingFile接收器本身都会自动创建配置的日志文件,并具有自己的逻辑来创建带时间戳的文件等。