#c# #logging #asp.net-core #serilog
#c# #ведение журнала #asp.net-core #serilog
Вопрос:
Я использую Serilog впервые и пытаюсь понять, как это работает. Я смотрю на образец ASP.Net Основное приложение, в котором настроен Serilog. Конфигурация serilog считывается из Appsettings.json:
"Serilog": {
"ApplicationName": "app-name",
"Using": [ "Serilog.Sinks.File" ],
"MinimumLevel": "Verbose",
"WriteTo": [
{
"Name": "RollingFile",
"Args": { "pathFormat": "log-{Date}.log" }
}
]
}
Объект журнала определяется при запуске, а «AddSerilog» определяется в методе «ConfigureServices«. Но кроме этого никакой другой информации журнала не присутствует. Однако, когда я запускаю приложение, в каталоге решения автоматически создаются файлы журнала.
Вопрос в том, Serilog автоматически создает эти файлы журнала?
Комментарии:
1.
Serilog
создаст эти файлы журнала, если вы хотите записать журнал в эти файлы, вам нужно вызватьLog.Logger.Information("This is Info");
Ответ №1:
Вызов AddSerilog
in ConfigureServices
регистрирует поставщика ведения журнала в Microsoft ILoggingBuilder
. Этот поставщик ( SerilogLoggerProvider
) реализует ILoggerProvider
и его CreateLogger
метод, который выглядит следующим образом:
public ILogger CreateLogger(string name)
{
return new SerilogLogger(this, _logger, name);
}
Из этого кода ясно, что Serilog SerilogLogger
реализует интерфейс Microsoft ILogger
.
Когда ASP.NET Core framework необходимо создать объект logger, он использует реализации ILoggerProvider
для создания экземпляров ILogger
путем вызова CreateLogger
. При наличии зарегистрированного поставщика Serilog это приводит к ASP.NET Ядро запрашивает экземпляр ILogger
и получает экземпляр SerilogLogger
, который обеспечивает мост между ASP.NET Ядро и Serilog.
Сам приемник RollingFile автоматически создает настроенный файл журнала всякий раз, когда генерируется событие журнала, со своей собственной логикой для создания файлов с метками времени и т.д. Соответственно.