gpt4 book ai didi

c# - 如何在 ASP.NET MVC Web 应用程序中使用 log4net 异步登录而不用尽所有可用线程?

转载 作者:行者123 更新时间:2023-11-30 16:55:50 25 4
gpt4 key购买 nike

AsyncForwardingAppender of the Log4Net.Async package在 ASP.NET MVC Web 应用程序中使用安全吗?我担心它会阻塞可用线程。

归结为我想调用 async 方法以将日志发送到 HTTP API。我可以使用像 the way this guy did it 这样的 async void 方法:

protected override async void Append(log4net.Core.LoggingEvent loggingEvent)
{
var message = new SplunkMessage(loggingEvent.Level, loggingEvent.ExceptionObject);
var success = await _splunkLogger.Report(message);
//do something with the success status, not really relevant
}

他后来updated his code :

public void DoAppend(log4net.Core.LoggingEvent loggingEvent)
{
var clientIp = _clientIpRetriever.GetClientIp();
var message = new SplunkMessage(loggingEvent.Level, loggingEvent.ExceptionObject, clientIp);
SendMessageToSplunk(message);
}

private async void SendMessageToSplunk(SplunkMessage message)
{
try
{
var success = await _splunkLogger.Report(message);
//do something unimportant
}
catch(Exception x)
{
LogLog.Error(GetType(), "Error in SplunkAppender.", x);
}
}

但由于dangers involved,我不敢真正尝试它:“首先,让我指出,‘即发即弃’在 ASP.NET 应用程序中几乎总是一个错误”。

有什么建议吗?

最佳答案

查看 source您可以看到 AsyncForwardingAppender 仅使用一个线程来使事件出队。使用它不会终止您的 MVC 应用程序,因为只会使用一个线程。

将“即发即弃”视为 Web 应用程序中的不良模式,您必须对声明有所保留,因为答案谈到让功能性操作不受监督的危险,不是日志记录。日志记录应该能够在您的应用程序不停止工作的情况下失败(这就是为什么 log4net 在配置或日志记录失败时从不说任何事情)

关于c# - 如何在 ASP.NET MVC Web 应用程序中使用 log4net 异步登录而不用尽所有可用线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28905769/

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