【问题标题】:how to implement logging in multithreaded ASP.NET web application (asmx web service)如何在多线程 ASP.NET Web 应用程序(asmx Web 服务)中实现日志记录
【发布时间】:2009-12-10 20:29:03
【问题描述】:

我正在开发一个时间关键的 ASMX Web 服务,我目前正在使用自己的类和静态方法来将行写入共享日志文件。日志不受锁/监视器保护,因为应用程序写入日志很多。我不知道如果一个线程在静态方法中被调度出一行,而另一个被调度的线程也在写入,会发生什么。现在我在问什么是实现日志记录的最佳方式?

谢谢你-马蒂

【问题讨论】:

  • 这取决于您使用的 .NET 和 Windows 版本。您使用的是哪个版本?

标签: c# multithreading logging asmx


【解决方案1】:

我同意@AdaTheDev。使用 log4net,您可以创建一个客户 Appender(获取记录的消息并将其传递到某个目的地,例如文件、电子邮件、事件日志等)。此附加程序可以将日志消息写入 MSMQ。

然后您可以有一个小组件来读取队列(单线程)并将消息写入日志文件。这意味着要记录一条消息,只需要渲染日志消息并将其写入队列所需的时间。将消息写入文件的行为将是单线程的,并且与您在 ASP.NET 方面的关键业务代码完全分离。

【讨论】:

    【解决方案2】:

    我建议使用第三方解决方案,例如 log4net 或 nlog,而不是自己动手,这样可以节省重新发明轮子

    【讨论】:

      【解决方案3】:

      我们选择的实现是使用 Microsoft Enterprise Library Logging Block,然后我们有一个类,其中包含一些我们调用的简化静态方法设置,它实际上将日志消息写入日志文件。在我们的多线程环境中使用它没有任何问题。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-04-08
        • 1970-01-01
        • 2016-03-28
        • 2023-04-10
        • 1970-01-01
        • 1970-01-01
        • 2017-09-12
        • 2011-09-29
        相关资源
        最近更新 更多