python - Django 和 fcgi - 日志记录问题

标签 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

对于日志记录,我有一个 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/

相关文章:

python - Azure 免费网站与 Python Django 未运行

python - 如何更改 Flask 日志记录/调试屏幕输出格式?

ruby - 哪个查询去了哪个数据库的 ActiveRecord 日志

python - 在 pandas plot 图例中显示非 ascii(日文)字符

python - 检查对象是否在列表中(不是 "by value",而是通过 id)

数据迁移中的 Django & South : Custom field methods are not executed when doing obj. save()

parsing - 解析事件日志文件

python - 将 Django 时间变量显示为完整的小时、分钟 am/pm

python - 如何将数组中 x 处的值与 x +1 处的值进行比较?

Django - 以 __init__ 形式更改 min_length?