вызвать действие, если асинхронное ведение журнала не удалось в asp. net ядре - PullRequest
2 голосов
/ 14 июля 2020

У меня есть требование, в котором я хотел бы записывать журналы в файл , если регистрация базы данных не удалась . Идея здесь состоит в том, чтобы снова вставить эти записи обратно в базу данных из файла, запустив некоторый пакет.

Я использую подход промежуточного программного обеспечения для регистрации запросов / ответов / исключений в базе данных.

public async Task InvokeAsync(HttpContext context)
{       
    //execute request and get response
    try{
        _logger.LogDebug("{database logging template}", log.Request, log.Response, log.Exception);
    }
    catch(Exception ex){
        //Log to file ---> _logger.LogDebug();
    }   
}

Моя конфигурация serilog выглядит следующим образом журналы в файле.

Я могу использовать .AuditTo в serilog, но это сделает ведение журнала синхронным и, следовательно, заблокирует ответ HTTP.

Есть предложения?

1 Ответ

2 голосов
/ 14 июля 2020
• 1000

Чтобы делать то, что вы хотите, и по-прежнему сохраняют асинхронность записи, вам нужно будет создать свою собственную версию Serilog.Sinks.MSSqlServer и обработать ошибки там или предоставьте их своему вызывающему коду.

Еще одна вещь, которую вы можете сделать, - это включить SelfLog и попытаться записать сообщения об ошибках в более надежный приемник, чтобы вы могли получить предупреждение о том, что вызовы не работают. Он не даст вам исходное сообщение, которое не удалось записать, но, по крайней мере, вы можете получить уведомление, когда возникают исключения.

...