在使用 log4net.async 时,您将如何优化 log4net 调试



我开始使用log4net.async使用单独的线程进行记录,但性能并没有像我最初预期的那样提高,我理解原因是我们正在记录的某些字符串很长,因为它们描述了收到的消息的属性。

例如,我们可以执行以下操作:

theLogger.Debug(msg.ToString());

当调用"ToString(("方法时,它可以生成一个表示消息的很长的字符串,并且可能需要一段时间才能实际生成它(缓慢的反序列化等(。尽管记录消息对我来说很重要,但我更愿意将消息"字符串化"在单独的线程上,而不是当前正在运行的线程上,以便我当前正在运行的线程可以继续处理。如何使 log4net 评估"ToString(("结果或在单独的线程上"字符串化"消息对象?

如果要将字符串创建推迟到以后的时间点(可能在单独的线程中(,则可以创建一个包装器,该包装器接受仅在需要时调用的Func<object, string>。然后,该包装器也可以将调度到单独的线程。

此外,我会重新评论对您当前的字符串操作以及通过Func调用调度到单独线程的开销执行一些基准测试。

最新更新