armink / EasyLogger

An ultra-lightweight(ROM<1.6K, RAM<0.3k), high-performance C/C++ log library. | 一款超轻量级(ROM<1.6K, RAM<0.3k)、高性能的 C/C++ 日志库

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

多进程或多应用调用easylog调用会丢失log

zhongwcool opened this issue · comments

commented

我还没有能力贡献代码,就贡献测试出的bug吧。

使用linux demo的代码,以so库的方式调用,设定文件大小为100k, rotate为2,同时启动四个程序,是为了测试多进程下log是否完整。
预期结果:
在elog_file.log中出现如下有序或无序,但自增数字连续的日志记录:
A: 000 Hello EasyLogger!
B: 000 Hello EasyLogger!
C: 000 Hello EasyLogger!
D: 000 Hello EasyLogger!

测试结果:
当第一个elog_file.log.0产生前,log是预期的的结果;
当第一个elog_file.log.0产生后,log记录出现错乱,log只出现其中一个程序的所有log,比如:
...
B: 199 Hello EasyLogger!
B: 200 Hello EasyLogger!
B: 201 Hello EasyLogger!
B: 202 Hello EasyLogger!
...
其他三个程序的log全部没有记录。shell显示程序还在正常产生log。

备注:
单进程无此问题。
我还没有能力直接分析解决,所以只能提issue。:-(

commented

补充:多进程情况下,当elog_file.log满,本应该生成elog_file.log.0,但此时会直接生成elog_file.log.1,且elog_file.log.0和elog_file.log 各被一个进程占据,只输出这个进程的log。这就是为什么看到了:
B: 199 Hello EasyLogger!
B: 200 Hello EasyLogger!
B: 201 Hello EasyLogger!
B: 202 Hello EasyLogger!
...
且elog_file.log.0和elog_file.log 同时在被写入数据。(正常情况应该只有elog_file.log被写入数据,elog_file.log.0不会被写入数据)

问题已经找到了,是因为写文件的size到达max的时候,多个进程都调用了elog_file_rotate函数,导致每个进程fopen的文件不一致导致的。问题会尽快解决。

感谢 @tianlongqin 的修正, @zhongwcool 试试 #55 这个 pr 吧

先检查一下,然后测试一下demo/os/linux下的示例,看看是否有问题。

commented

先检查一下,然后测试一下demo/os/linux下的示例,看看是否有问题。

抱歉。确实在merge时犯了低级错误,只修改了*_cgf.h文件,未替换"add your code here"。未免误导他人,我删除了错误的反馈信息。

测试结果:
已经解决了如上描述的问题。在我的测试代码中验证通过。感谢。