开Zlog源代码使用的是pthread_rwlock_t线程读写锁,怎么能够保证多进程同时调用呢,谢谢
开Zlog源代码使用的是pthread_rwlock_t线程读写锁,怎么能够保证多进程同时调用呢,谢谢
看源代码中使用的都是线程级别的锁,怎么能够保证多进程访问呢?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
开Zlog源代码使用的是pthread_rwlock_t线程读写锁,怎么能够保证多进程同时调用呢,谢谢
看源代码中使用的都是线程级别的锁,怎么能够保证多进程访问呢?
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(16)
辛苦了,代码问题吗,对于单个应用程序使用一个log文件应该没问题吧
刚把代码发上git,可以试试看,性能有一定的下降,但保证正确
https://github.com/HardySimpson/zlog/archive/master.zip
好的,我测试一下,幸苦了!!!
知道问题在哪里了,我想想怎么解决
对,单进程一个是可以的
测试代码如下:
测试配置文件如下:
尝试了一下,没发现问题……把你的测试代码稍微改了一下,10秒才输出一次日志太慢了
配置文件是一样的
第一次执行,结果是
第二次执行是
第三次执行是,可以看到刚好转档到地一个文件
第四次执行是
继续
一直没观察到问题。。。
可能我表达有误,我当时测试环境不是一个应用程序的里面使用多进程写文件。而是同一个应用程序,重复启动了两次,结果进行日志转档时,旧的文件大小仍旧在增加。
这应该也没问题,每次写日志的时候都会去检测文件大小,和进程起了几次没关系。
手工写了一个多进程的测了一下,没问题。你的程序能也贴下么?
配置规则如下:
[global]
#改变量可以不写,默认是true,如果使用设置为true时,Zlog就会严格检查所用格式和规则,否则,忽略所用格式和规则。
strict init = true
buffer min = 1024
buffer max = 2048
#转档指定锁文件,用于保证多进程下日志安全转档,使用默认的配置文件为锁文件。
#日志访问权限,600 只允许当前用户访问
file perms = 600
[formats]
#使用默认日志输出格式 "%d %V [%p %F %L] %m%n" 输出日志格式为:%-5V按照日志级别按照左对齐
#2012-12-13 10:23:29 INFO [31668:test_hello.c:41] hello, zlog
simple = "%d.%-8.8us %-5V [%-8.8p.%-8.8t %F %L] %m%n"
[rules]
#优先级从低到高 debug info notice warn fatal debug大于等于debug的优先级都能给通过debug输出。
my_cat.* >stderr;
#当hello.txt文件大小大于1MB时,会将hello.txt->hello.txt.0 0代表不删除任何文件
my_cat.INFO "hello.txt",1MB * 3 ~ "hello.txt.#r";simple
帮忙看一下那个地方有错误,谢谢了。在linux下,打开多个应用程序时,文档转档功能就不正常了。
谢谢,但看初始化代码时,创建的都是pthread_rwlock_t zlog_env_lock 线程级别的读写锁,当多个进程都调用初始化函数时,岂不是每个进程都创建了各自的读写锁??
难易兄,在查看用户手册时,提到所用API函数接口都是线程安全的,是什么意思呢?在多个进程该怎么使用呢?会不会产生不安全因素呢?
难易兄,我这边测试Zlog,发现不同程序(即不同应用程序)写同一个日志文件时,发现文档转存时,旧的文件大小还在不断增加。但同一个应用程序不同线程使用时没有出现问题,日志转存正常。是不是Zlog不支持多应用程序写同一个文件的情况?谢谢了
你说的是多进程写一个文件的原子性吗?
多进程写文件的原子性由write()这个系统调用保证,只要打开文件描述符用O_APPEND模式打开,单个write() 就是原子的。