使用msmq进行异步日志记录

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

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

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

请指教。

谢谢,sveerap

我会建议不要这样做。 对于一个并不存在的问题,这是一个不必要的复杂解决方案。 我已经在多个项目中使用了log4net,并且因为它没有看到任何显着的性能下降。

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

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

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

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

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

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

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

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

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