我是第一次使用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是否会自动创建那些日志文件?
答案 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接收器本身都会自动创建配置的日志文件,并具有自己的逻辑来创建带时间戳的文件等。