我有一个在Django中运行的网站。前端是lighttpd,正在使用fcgi托管django。
我按如下方式开始我的fcgi流程:
python2.6 /<snip>/manage.py runfcgi maxrequests=10 host=127.0.0.1 port=8000 pidfile=django.pid
对于日志记录,我有一个RotatingFileHandler定义如下:
file_handler = RotatingFileHandler(filename, maxBytes=10*1024*1024, backupCount=5,encoding='utf-8')
日志记录正在工作。但是,当文件甚至没有达到10Kb(更不用说10Mb)时,它们似乎都在旋转。我的猜测是,每个fcgi实例仅处理10个请求,然后重新生成。每次重生fcgi都会创建一个新文件。我确认fcgi经常以新的进程ID启动(很难准确告知时间,但不到一分钟)。
有什么办法可以解决这个问题?我希望所有fcgi实例都记录到一个文件,直到达到大小限制为止,此时将进行日志文件轮换。
最佳答案
如Alex所述,日志记录是线程安全的,但是不能安全地使用标准处理程序将多个进程从日志记录到单个文件中。
ConcurrentLogHandler使用文件锁定来允许从多个进程中进行日志记录。
关于python - Django和FCGI-日志记录问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1203896/