通过主管和docker从django输出彩色原木
我的目标是在docker compose logs中获得MyDjangowebservice的彩色日志通过主管和docker从django输出彩色原木,django,logging,colors,docker-compose,Django,Logging,Colors,Docker Compose,我的目标是在docker compose logs中获得MyDjangowebservice的彩色日志 我使用docker compose来管理基于Django框架的web服务列表 每个容器运行一个my_init bash脚本,该脚本依次运行一个runit(在我的例子中这是历史性的)脚本,该脚本运行一个supervisordprocess: Django服务器在WSGI中与Gunicorn接口,并通过Nginx提供服务 supervisord配置文件如下所示: [supervisord] ht
[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
'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日志是彩色的 ./manage.py runserver
- 但是,从外部看,docker compose日志没有着色
有什么想法吗?这里是一个使用Gunicorn的Django应用程序的最简单的工作示例。诀窍是确保Gunicorn记录器配置为使用使用彩色格式化程序的处理程序 设置.py 终端输出 奖金 根据我的经验,检查日志配置的最佳方法是使用 只需在应用程序上下文中执行它(例如在Django shell中) 它应该打印出一个现有伐木工人的良好表现 我更进一步,将其添加到我的
url.py
,以便在安装了所有记录器之后可以看到日志记录配置
from django.conf.urls import url
from django.http import HttpResponse
import logging_tree
urlpatterns = [
url(r'^loggers', loggers),
]
def loggers(request):
"""
Returns a representation of the existing loggers
"""
return HttpResponse(logging_tree.format.build_description()[:-1])
它应该返回与此类似的内容
<--""
Level INFO
Handler Stream <_io.TextIOWrapper name='<stderr>' mode='w' encoding='UTF-8'>
Level INFO
Formatter <colorlog.colorlog.ColoredFormatter object at 0x1103a1668>
|
o<--"django"
| Level INFO
| Handler Stream <_io.TextIOWrapper name='<stderr>' mode='w' encoding='UTF-8'>
| Level INFO
| Filter <django.utils.log.RequireDebugTrue object at 0x11047d518>
| Handler <AdminEmailHandler (ERROR)>
| Level ERROR
| Filter <django.utils.log.RequireDebugFalse object at 0x11053a7f0>
| |
| o<--"django.db"
| | Level NOTSET so inherits level INFO
| | |
| | o<--"django.db.backends"
| | Level NOTSET so inherits level INFO
| | |
| | o<--"django.db.backends.schema"
| | Level NOTSET so inherits level INFO
| |
| o<--"django.request"
| | Level NOTSET so inherits level INFO
| |
| o "django.server"
| | Level INFO
| | Propagate OFF
| | Handler Stream <_io.TextIOWrapper name='<stderr>' mode='w' encoding='UTF-8'>
| | Level INFO
| | Formatter <django.utils.log.ServerFormatter object at 0x11053a630>
| |
| o<--"django.template"
| Level NOTSET so inherits level INFO
|
o<--"gunicorn"
Level NOTSET so inherits level INFO
|
o "gunicorn.access"
| Level INFO
| Propagate OFF
| Handler Stream <_io.TextIOWrapper name='<stderr>' mode='w' encoding='UTF-8'>
| Level INFO
| Formatter <colorlog.colorlog.ColoredFormatter object at 0x1103a1668>
|
o "gunicorn.error"
| Level INFO
| Propagate OFF
| Handler Stream <_io.TextIOWrapper name='<stderr>' mode='w' encoding='UTF-8'>
| Level INFO
| Formatter <colorlog.colorlog.ColoredFormatter object at 0x1103a1668>
|
o<--"gunicorn.http"
Level NOTSET so inherits level INFO
|
o<--"gunicorn.http.wsgi"
Level NOTSET so inherits level INFO
级别信息
格式化程序
|
o
|级别信息
|滤器
|处理者
|水平误差
|滤器
| |
|还实现了那个家伙的要求在Django日志设置中有什么?你到底想给什么上色?我假设那些来自Gunicorn的人,在本例中,您是否更改了Gunicorn记录器的日志记录配置?请查看下面我的答案,以获得一个有效的示例。
import logging_tree
logging_tree.printout()
from django.conf.urls import url
from django.http import HttpResponse
import logging_tree
urlpatterns = [
url(r'^loggers', loggers),
]
def loggers(request):
"""
Returns a representation of the existing loggers
"""
return HttpResponse(logging_tree.format.build_description()[:-1])
<--""
Level INFO
Handler Stream <_io.TextIOWrapper name='<stderr>' mode='w' encoding='UTF-8'>
Level INFO
Formatter <colorlog.colorlog.ColoredFormatter object at 0x1103a1668>
|
o<--"django"
| Level INFO
| Handler Stream <_io.TextIOWrapper name='<stderr>' mode='w' encoding='UTF-8'>
| Level INFO
| Filter <django.utils.log.RequireDebugTrue object at 0x11047d518>
| Handler <AdminEmailHandler (ERROR)>
| Level ERROR
| Filter <django.utils.log.RequireDebugFalse object at 0x11053a7f0>
| |
| o<--"django.db"
| | Level NOTSET so inherits level INFO
| | |
| | o<--"django.db.backends"
| | Level NOTSET so inherits level INFO
| | |
| | o<--"django.db.backends.schema"
| | Level NOTSET so inherits level INFO
| |
| o<--"django.request"
| | Level NOTSET so inherits level INFO
| |
| o "django.server"
| | Level INFO
| | Propagate OFF
| | Handler Stream <_io.TextIOWrapper name='<stderr>' mode='w' encoding='UTF-8'>
| | Level INFO
| | Formatter <django.utils.log.ServerFormatter object at 0x11053a630>
| |
| o<--"django.template"
| Level NOTSET so inherits level INFO
|
o<--"gunicorn"
Level NOTSET so inherits level INFO
|
o "gunicorn.access"
| Level INFO
| Propagate OFF
| Handler Stream <_io.TextIOWrapper name='<stderr>' mode='w' encoding='UTF-8'>
| Level INFO
| Formatter <colorlog.colorlog.ColoredFormatter object at 0x1103a1668>
|
o "gunicorn.error"
| Level INFO
| Propagate OFF
| Handler Stream <_io.TextIOWrapper name='<stderr>' mode='w' encoding='UTF-8'>
| Level INFO
| Formatter <colorlog.colorlog.ColoredFormatter object at 0x1103a1668>
|
o<--"gunicorn.http"
Level NOTSET so inherits level INFO
|
o<--"gunicorn.http.wsgi"
Level NOTSET so inherits level INFO