Захватывает ли Serilog журнал автоматически при настройке уровня журнала - PullRequest
0 голосов
/ 28 марта 2019

Я впервые использую Serilog и пытаюсь понять, как он работает.Я смотрю на пример ASP.Net Core приложения, где настроен Serilog.Конфигурация serilog читается из Appsettings.json:

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

Объект журнала определяется при запуске, а " AddSerilog " определяется в методе " ConfigureServices ",Но кроме этого никакой другой информации журнала нет.Однако, когда я запускаю приложение, автоматические файлы журнала генерируются в каталоге Solution.

Вопрос в том, Serilog автоматически создает эти файлы журнала?

1 Ответ

2 голосов
/ 28 марта 2019

Звонок на AddSerilog в ConfigureServices регистрирует провайдера регистрации в Microsoft ILoggingBuilder. Этот провайдер (SerilogLoggerProvider) реализует ILoggerProvider и его CreateLogger метод, который выглядит следующим образом:

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

Из этого кода видно, что Serilog SerilogLogger реализует интерфейс ILogger от Microsoft.

Когда платформе ASP.NET Core необходимо создать объект регистратора, он использует реализации ILoggerProvider для создания экземпляров ILogger, вызывая CreateLogger. При наличии зарегистрированного поставщика Serilog это приводит к тому, что ASP.NET Core запрашивает экземпляр ILogger и получает экземпляр SerilogLogger, который обеспечивает мост между ASP.NET Core и Serilog.

Приемник RollingFile сам создает настроенный файл журнала автоматически каждый раз, когда создается событие журнала, со своей собственной логикой для создания файлов с метками времени и т. Д., Соответственно.

...