我们有一个在多个线程中运行并使用 Log4Net 作为日志记录框架的应用程序。我们遇到了一些日志事件未记录的情况。正如文档中提到的,文件附加器其他 Appender 是“not对于多线程操作是安全的”。
我在网上搜索解决方案或 Appenders,但找不到。
您知道使用环形缓冲区或队列来提供多线程支持的多线程安全 Log4Net Appender 吗?或者我们应该使用不同的多线程安全日志框架吗?
提前致谢!
我编写了一些单元测试来重现该问题:一个测试创建 50 个线程,每个线程记录 500 条消息。然后对写入的行进行计数,结果我得到了 25,000 (50 x 500) 行不同顺序的行。我在双核和八核机器上测试了它。
我测试了静态记录器:
private static ILog StaticLog = log4net.LogManager.GetLogger(RepositoryName, "Static logger");
并为测试类/线程的每个实例提供一个记录器:
ILog instanceLog = LogManager.GetLogger(RepositoryName, "Instance logger: " + ThreadId.ToString());
所有测试都是绿色的。
所以Log4Net工作得很好并且能够很好地处理多线程场景。 Appender 文档应该更新,并声明如果以正确的方式使用 Logger API,则支持多线程操作。
我猜想我们在客户计算机上遇到的丢失日志条目的问题是由其他问题引起的。也许底层虚拟机或硬件已损坏。
感谢您的帮助!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)