套餐在ASP.NET MVC Web应用程序中使用安全吗?我担心它会堵塞可用的线程。
接下来,我想调用async方法将日志发送到HTTP。我可以使用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
}他后来是更新他的代码
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);
}
}但是我太害怕了,因为所涉危险:“首先,让我指出,在ASP.NET应用程序中,”火和忘记“几乎总是一个错误”。
有什么建议吗?
发布于 2015-03-09 09:08:08
查看来源,您可以看到AsyncForwardingAppender只使用一个线程来排列事件。使用它不会杀死你的MVC应用程序,因为只有一个线程将被使用。
在网络应用程序中,“火与忘”是一种糟糕的模式,你必须在声明中添加一点盐,因为答案谈到了让一项功能性操作不受监督而不是日志操作的危险。日志记录应该能够在应用程序停止工作的情况下失败(这就是为什么当配置或日志记录失败时,log4net从不说任何话)。
https://stackoverflow.com/questions/28905769
复制相似问题