Django和fcgi - 记录问题

Kry*_*ski 5 python django logging fastcgi lighttpd

我有一个在Django运行的网站.前端是lighttpd,正在使用fcgi来托管django.

我开始我的fcgi进程如下:

python2.6 /<snip>/manage.py runfcgi maxrequests=10 host=127.0.0.1 port=8000 pidfile=django.pid
Run Code Online (Sandbox Code Playgroud)

对于日志记录,我有一个RotatingFileHandler定义如下:

file_handler = RotatingFileHandler(filename, maxBytes=10*1024*1024, backupCount=5,encoding='utf-8')
Run Code Online (Sandbox Code Playgroud)

记录正在运行.但是,当它们甚至没有达到10Kb时,看起来文件正在旋转,更不用说10Mb了.我的猜测是每个fcgi实例只处理10个请求,然后重新生成.每个重生的fcgi都会创建一个新文件.我确认fcgi经常在新的进程id下启动(很难准确地说出时间,但是在一分钟之内).

有没有办法解决这个问题?我希望所有fcgi实例都记录到一个文件,直到达到大小限制,此时将发生日志文件轮换.

gab*_*bor 6

正如Alex所说,日志记录是线程安全的,但标准处理程序无法安全地用于从多个进程登录到单个文件中.

ConcurrentLogHandler使用文件锁定来允许从多个进程内进行日志记录.