首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在不耗尽所有可用线程的情况下异步地使用log4net在ASP.NET MVC Web应用程序中登录?

如何在不耗尽所有可用线程的情况下异步地使用log4net在ASP.NET MVC Web应用程序中登录?
EN

Stack Overflow用户
提问于 2015-03-06 18:58:36
回答 1查看 2.1K关注 0票数 3

套餐在ASP.NET MVC Web应用程序中使用安全吗?我担心它会堵塞可用的线程。

接下来,我想调用async方法将日志发送到HTTP。我可以使用async void方法,比如这家伙是怎么做的

代码语言:javascript
复制
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
}

他后来是更新他的代码

代码语言:javascript
复制
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应用程序中,”火和忘记“几乎总是一个错误”。

有什么建议吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-03-09 09:08:08

查看来源,您可以看到AsyncForwardingAppender只使用一个线程来排列事件。使用它不会杀死你的MVC应用程序,因为只有一个线程将被使用。

在网络应用程序中,“火与忘”是一种糟糕的模式,你必须在声明中添加一点盐,因为答案谈到了让一项功能性操作不受监督而不是日志操作的危险。日志记录应该能够在应用程序停止工作的情况下失败(这就是为什么当配置或日志记录失败时,log4net从不说任何话)。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28905769

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档