首页 > 解决方案 > Django将runserver日志打印到文件

问题描述

我正在使用 supervisord 的容器内运行 django 应用程序。

但有时我需要查看日志来修复一些错误,但我找不到解决方法。

我试图添加一个stdout_logfilestderr_logfile总是错误日志文件是空的

这是我的supervisor.conf

[supervisord]
loglevel=info
logfile=/tmp/supervisord.log

[program:myapp]
command = python3 -u /usr/src/app/manage.py runserver 0.0.0.0:8000
stdout_logfile=/usr/src/app/out.log
stderr_logfile=/usr/src/app/err.log

并且总是相同的结果,out.log文件将包含异常发生之前的行并且err.log不会被创建

这是我运行 docker compose 时得到的输出

2020-05-13 17:33:44,140 INFO supervisord started with pid 1
2020-05-13 17:33:45,144 INFO spawned: 'myapp' with pid 9
2020-05-13 17:33:46,201 INFO success: myapp entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)

标签: djangodockerdocker-composesupervisord

解决方案


经过一番挣扎后,我发现日志正在被缓冲,因此解决方案是添加environment = PYTHONUNBUFFERED=1supervisor.conf文件中

修改后的我的conf文件

[supervisord]
loglevel=info
logfile=/tmp/supervisord.log

[program:myapp]
command = python3 -u /usr/src/app/manage.py runserver 0.0.0.0:8000
environment = PYTHONUNBUFFERED=1
stdout_logfile=/usr/src/app/out.log
stderr_logfile=/usr/src/app/err.log

推荐阅读