【发布时间】:2017-04-09 18:39:05
【问题描述】:
我的目标是在 docker-compose logs 中获取我的 Django 网络服务的 colorized 日志。
我使用 docker-compose 来管理基于 Django 框架的 Web 服务列表。
-
每个容器,运行一个 my_init bash 脚本,然后运行一个 runit(这在我的例子中是历史性的)脚本,该脚本运行一个 supervisord em> 进程:
my_init---runsvdir-+-runsv---run---supervisord-+-gunicorn---gunicorn | |-nginx---8*[nginx] | |-python---9*[python] | |-python---python (Django) | `-redis-server---2*[{redis-server}] `-runsv Django 服务器在 WSGI 中与 Gunicorn 接口,并通过 Nginx
提供服务
-
supervisord 配置如下:
[supervisord] http_port=/var/tmp/supervisor.sock ; (default is to run a UNIX domain socket server) stdout_logfile=/dev/stdout stdout_logfile_maxbytes=0 stderr_logfile=/dev/stderr stderr_logfile_maxbytes=0 [program:gunicorn_core_service] #environment=myapp_VENV=/opt/myapp/venv/ environment=PYTHONPATH=/opt/myapp/myappServer/myappServer command = /opt/myapp/venv/bin/gunicorn wsgi -b 0.0.0.0:8000 --timeout 90 --access-logfile /dev/stdout --error-logfile /dev/stderr directory = /opt/myapp/myappServer user = root autostart=true autorestart=true redirect_stderr=true stdout_logfile=/dev/stdout stdout_logfile_maxbytes=0 stderr_logfile=/dev/stderr stderr_logfile_maxbytes=0 [program:django-celery] command=/opt/myapp/venv/bin/python ./manage.py celery --app=myappServer.celeryapp:app worker -B --loglevel=INFO directory=/opt/myapp/myappServer numprocs=1 stdout_logfile=/dev/stdout stdout_logfile_maxbytes=0 stderr_logfile=/dev/stderr stderr_logfile_maxbytes=0 redirect_stderr=true autostart=true autorestart=true startsecs=10 [program:nginx] command=nginx -g "daemon off;" #user = root autostart=true autorestart=true redirect_stderr=true stdout_logfile=/dev/stdout stdout_logfile_maxbytes=0 stderr_logfile=/dev/stderr stderr_logfile_maxbytes=0 由于docker只能记录一次进程,所以我的容器所有进程的日志都转发到/dev/stdout和/dev/stderr
-
我使用colorlog 作为颜色格式化程序来为 Django 日志着色:
'formatters': { 'color': { '()': 'colorlog.ColoredFormatter', 'format': '%(log_color)s%(levelname)-8s %(message)s', 'log_colors': { 'DEBUG': 'bold_black', 'INFO': 'white', 'WARNING': 'yellow', 'ERROR': 'red', 'CRITICAL': 'bold_red', }, } },- 当我从容器
./manage.py runserver
内运行服务时,日志会被着色。 - 但是从外部看,docker-compose 日志没有着色。
- 当我从容器
我尝试添加
tty: true在我的服务中描述为here,但它似乎不再起作用了。
有什么想法吗?
【问题讨论】:
-
并且还实现了那家伙的要求
-
你的 Django LOGGING 设置中有什么?你到底想给什么上色?我假设那些来自 Gunicorn 的人,在这种情况下,您是否更改了 Gunicorn 记录器的日志记录配置?在下面查看我的答案以获取工作示例。
标签: django logging colors docker-compose