Как игнорировать LogDebug, когда LogLevel установлен в Информация - PullRequest
0 голосов
/ 25 февраля 2020

Я использую ASP. NET Ядро с Serilog.

В контроллере у меня есть несколько журналов для отладки, таких как:

public async Task<IActionResult> Get(...)
{
    _logger.LogInformation("Action Get is running");
    _logger.LogDebug("-- debug log. deserialized payload: {Payload}", DeserializePayload(message));
    ...
}

и метод

private string DeserializePayload(byte[] message)
{
    _logger.LogInformation("DeserializePayload is running");
    ...
    return "json as a string";
}

MinimumLevel установлен на Information!

Как игнорировать вызов DeserializePayload в журнале отладки, когда минимальный уровень установлен на Information? Результат будет

Действие Get выполняется

DeserializePayload выполняется

Мне нужно пропустить запуск метода DeserializePayload, когда мне не нужен журнал отладки , Есть ли способ сделать это, кроме как с помощью #if DEBUG?

Ответы [ 2 ]

2 голосов
/ 25 февраля 2020

Вы можете спросить Serilog, включен ли уровень журнала событий Debug, а затем решить, следует ли вам вызывать метод DeserializePayload.

например,

public async Task<IActionResult> Get(...)
{
    _logger.LogInformation("Action Get is running");

    if (_logger.IsEnabled(LogLevel.Debug))
    {
        _logger.LogDebug("-- debug log. deserialized payload: {Payload}", DeserializePayload(message));
    }

    // ...
}
1 голос
/ 25 февраля 2020

К сожалению, логгер работает так, что _logger.LogDebug всегда работает, но уровень подавляет вывод в ваш источник журналов (реализованный регистратором). Здесь вам нужна условная логика c, чтобы сначала проверить уровень журнала (я предполагаю, что запуск DeserializePayload - дорогостоящая операция, которую вы пытаетесь избежать). Таким образом, вам нужен некоторый уровень условных логи c на основе настроенного уровня логов. Основываясь исключительно на вашем фрагменте и не имея никакого другого представления о структуре вашего приложения, я бы предложил добавить IConfiguration в этот класс и использовать его для проверки настроенного уровня ведения журнала.

...