使用msmq进行异步日志记录

时间:2011-02-16 07:00:25

标签: c# .net logging

我需要登录我们的应用程序,并希望尽可能少地记录由于记录所消耗的时间。我正在考虑使用MSMQ,以便应用程序将登录到MSMQ,然后我可以异步地将消息从MSMQ记录到数据库/文件。

这个想法在性能方面是否合适?或使用log4net同步记录到平面文件更好。

此外,我正在考虑编写日志记录抽象层,以便以后插入任何日志记录工具,而不会影响其他代码。

请告知。

谢谢, sveerap

3 个答案:

答案 0 :(得分:6)

我会反对这一点。对于不存在的问题,这是一个不必要的复杂解决方案。我已经在多个项目中使用了log4net,并且从未发现任何显着的性能下降。

最好还是为每条日志消息选择正确的日志记录级别(DEBUG,INFO,WARN等)。当您开始项目时,也许在您投入生产的短时间内,您可以记录从DEBUG到更高级别的所有内容。如果您确信一切正常,请在配置中切换到INFO。这应该足以解决您在日志记录中遇到的任何性能问题。

关于你的抽象层,我也不会这样做。 Log4net本身通过其logger appender抽象了日志记录本身的所有细节。如果你真的想要这个,你可能还想看看Common.Logging

答案 1 :(得分:4)

对于它的价值,有些情况下这不是过度杀伤。但是,对于大多数应用程序,我会说它是。

我在一个由几个z / OS大型机和各种* nix中端组成的环境中工作。系统都将日志记录消息写入已处理的共享队列。从组织上讲,它被发现可以提供更好的吞吐量并确保日志的一致性。

话虽如此,我可以看到在您的应用程序中使用此方法的优势。例如,开发大量内部应用程序并拥有一个公共日志(例如,在数据库中 - 有一个进程来读取队列并将其写入数据库)将允许您聚合所有消息。

但是,您可能会发现log4net或其他.NET日志包完全符合您的需求。

两者都有优势,但正如其他人所说的那样 - 使用MSMQ进行记录(可能)就像用火箭筒飞行一样。

答案 2 :(得分:1)

老实说,MSMQ对于记录消息似乎有些过分。除非您绝对需要可靠的日志消息传递,否则log4net似乎是一个非常合适的解决方案。还要记住,在MSMQ中创建消息可能需要比实际写入缓冲文件更长的时间。

您可能还想查看System.Diagnostics.Trace对象。