log4net是否有可能在多线程应用程序中无序地写入内容

时间:2018-11-16 20:55:00

标签: c# log4net

我有一个多线程C#应用程序,为此我们使用common.logging / log4net。尽管可以按照人们期望的那样合理地读取日志,但时间戳可能相差很远。我在质疑我是否可以相信我所看到的操作顺序。

在这种情况下,我正在跟踪内存并重置ConsumerUI。在T09:27条目中我有很多记忆,在下一个条目T04:27中我没有。但是您会注意到T04时间戳比之前的日志输入早了5个小时。

我添加了诊断代码,以查看日志语句是否真正失序而并非真正失序。时间戳到达是完全错误的。

这是怎么回事?

enter image description here

enter image description here

2 个答案:

答案 0 :(得分:2)

是的。所有日志记录都是异步的。日志读取器负责将写入的日志文件中的时间序列关联起来。如果不是这种情况,则日志记录会在其他多线程应用程序上造成可怕的同步块。

答案 1 :(得分:0)

根据您的日志目标配置,所记录操作的顺序可能相距甚远。通常,对于数据库,文件或其他昂贵的IO日志记录目标,将使用缓冲异步包装器,该包装器将根据使用情况成批写入IO目标。因此,刷新它们的顺序与记录的顺序不匹配是很常见的。

我们总是按dateLoggedUTC(该日期的字段)对日志进行排序,以便真正了解操作的顺序。