gpt4 book ai didi

c# - 如果异步日志记录在 asp.net core 中失败,则调用一个操作

转载 作者:行者123 更新时间:2023-12-04 15:23:02 26 4
gpt4 key购买 nike

我有一个要求,我想将日志写入文件如果数据库日志记录失败。这里的想法是通过运行一些批处理再次将这些记录从文件插入回数据库。

我正在使用中间件方法将请求/响应/异常记录到数据库。

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 配置是这样的

.WriteTo.MSSqlServer(
connectionString: config.GetConnectionString("DB"),
sinkOptions: new SinkOptions { TableName = "LogTable", AutoCreateSqlTable = true },
columnOptions: columnOptions));

我不确定在不阻塞 HTTP 请求的情况下,如何检查 _logger.LogDebug 是否成功执行,如果没有,则继续在 catch 中写入日志一个文件。

我可以在 serilog 中使用 .AuditTo,但这会使日志记录同步,因此会阻止 HTTP 响应。

有什么建议吗?

最佳答案

Serilog 目前没有让您在异步日志写入失败时捕获错误的功能,因此 .AuditTo 将是唯一可靠的开箱即用选项,但缺点是正如您提到的那样,调用变得同步。

要执行您想要的操作并且仍然保持写入异步,您必须创建自己的 Serilog.Sinks.MSSqlServer 版本并在那里处理错误或将它们暴露给您的调用代码。

您可以做的另一件事是启用 SelfLog并尝试将错误消息写入更可靠的接收器,这样您就可以收到调用失败的警报。它不会给你写失败的原始消息,但至少你可以在发生异常时得到通知。

关于c# - 如果异步日志记录在 asp.net core 中失败,则调用一个操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62901130/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com