python进程写文件与多进程记录日志

假设有个进程,一直在写一个名字叫做1的文件,然后我们在它运行的过程中将文件改名了,会发生什么事情呢?

写个程序试试:


然后运行它,此时可以看到:


因为进程得到了文件的句柄,所以就算这个文件改名为2了,它也会继续往2这个文件写入的。

这样也就解释了apache在linux启动多个进程响应url请求时,调用TimeRotatingFileHandler时,第二个进程把第一个进程的日志名错误改名为带后缀的文件名,第一个进程也会依旧往带后缀的文件里写入后续的日志。所以看起来xxx.log和xxx.log.20160417都不停的有18号的日志写入。

所以django在linux下多进程使用TimeRotatingFileHandler写日志会有问题。

目前看来,有2种方法处理多进程写日志的问题:

1.进程id加到文件名中,但是apache重启时子进程id也会变;这样可能存在多个非当天的日志但不带时间后缀(进程id不一样)

2.使用concurrentlog第三方库记录日志,下载地址:

https://pypi.python.org/pypi/ConcurrentLogHandler/0.9.1


经过和同事交流,得知一个多进程按日期写日志的库。向作者致敬:

https://github.com/kieslee/mlogging


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值