使用log4net.async时,如何优化log4net调试?

时间:2017-03-29 13:25:21

标签: c# log4net

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

例如,我们可以这样做:

theLogger.Debug(msg.ToString());

当调用“ToString()”方法时,它可能会生成一个表示消息的非常长的字符串,实际生成它可能需要一段时间(慢速反序列化等)。虽然对我来说记录消息很重要,但我希望在单独的线程而不是当前运行的线程上“字符串化”消息,以便我当前运行的线程可以继续处理。我如何让log4net在单独的线程上评估“ToString()”结果或“stringify”消息对象?

1 个答案:

答案 0 :(得分:1)

如果要将字符串创建推迟到以后的某个时间点(可能在单独的线程中),您可以创建一个包含Func<object, string>的包装器,该包装器仅在需要时才会被调用。然后,该包装器也可以将调度发送到单独的线程。

此外,我建议您对当前的字符串操作以及使用Func invokcation调度到单独线程的开销执行一些基准测试。