zlog日志打印时间有些乱序

发布于 2021-12-01 01:24:43 字数 192 浏览 1006 评论 12

您好!

zlog会出现下面的情况:时间上好像有些乱序,请问是什么原因? 是否是因为小弟没有设置相关参数:

日志截图

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(12

剑心龙吟 2021-12-04 16:30:35

回头来说其实可以不用锁,用一个无锁的消息队列来搞就可以了。。。

坏尐絯 2021-12-04 16:30:31

ACE里的日志打印基本没有时间乱序问题。可以参考一下他。

妖妓 2021-12-04 16:30:27

要么是它太慢了,以至于无法观察到这种现象。。 要么是它每次写日志都要加全局的进程锁,这也同样会导致慢。 zlog也不会每次都出现这种情况的。

墨洒年华 2021-12-04 16:29:39

个人感觉无需进行排序,在多进程下,这样很正常,若要追踪错误,应该根据PID 进行日志筛选,这样就不会有时间错位了把。

把昨日还给我 2021-12-04 16:29:10

刚才试验了一下log4cplus在多线程下打印无乱序现象,但它是C++实现,不知是否有参考价值

各自安好 2021-12-04 16:16:38

这个问题的解决等价于要排序,多线程先获取时间的先写文件,也就是说有个线程要已经获取了时间,但要等待别的线程写完文件后再写。

任何等待是需要开销的,CPU空转,或其他之类的,要和别的线程通信。

所以从库的角度出发,如果要解决这个问题,必然要牺牲工作线程的性能,用于等待其他线程,而得到的好处是日志排序的细微改进。所以我觉得意义不大,不过你提这个问题还是很好的。

如果为了追求精确性,可以在事后排序,用sort过一遍日志文件。

 

妖妓 2021-12-04 15:59:02

个人觉得这个问题还是要解决一下,大家一起想一个兼顾速度与开销的方案,把zlog做的更加完善!

画骨成沙 2021-12-04 14:54:10

如果将取时间与写操作做为原子操作是否可以解决此问题

混吃等死 2021-12-04 10:58:26

原子就要锁,要锁就意味着A线程什么时候写日志要等待B线程,如果B线程卡住了,那么A线程也一起卡住。。。

伴我心暖 2021-12-04 08:32:07

这是有可能的,因为在写一次日志的过程中,取时间是其中一步

......

get_time

write_file

......

如果AB两个线程在时间上是这么执行的话

 

A  get_time

B  get_time

B  write_file

A  write_file

于是后面的时间就会比前面的时间先打印。

如果要严格规避这个问题,目前我想到的办法有

需要让每条写日志的语句都是原子性的,在一个进程内,代价太大。

或者可以把多个线程的日志分开来写,可以保证不乱序。

皇甫轩 2021-12-04 01:13:44

是在多线程情况下出现的此问题,时间乱序毕竟对问题定位不利

风苍溪 2021-12-03 12:20:31

估计是多线程

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文