Ausgabe von farbigen Protokollen von Django mit Supervisor und Docker-Compose

8

Mein Ziel ist es, colorierte Protokolle meines Django -Webdienstes in docker-compose logs zu erhalten.

  1. Ich benutze docker-compose, um eine Liste von Web-Services basierend auf dem Django-Framework zu verwalten.

  2. Führen Sie in jedem Container ein my_init Bash-Skript aus, das seinerseits ein Skript runit (das ist in meinem Fall historisch) ausführt, das einen supervisord Prozess:

    %Vor%
  3. Der Django-Server ist in WSGI mit einem Gunicorn verbunden und wird über ein Nginx

  4. bedient
  5. Das Supervisord Conf ist das folgende:

    %Vor%
  6. Da docker nur einen Prozess protokollieren kann, werden die Protokolle aller Prozesse meines Containers an / dev / stdout und / dev / stderr

  7. Und ich verwende colorlog als Farbformatierer zum Einfärben von Django-Logs:

    %Vor%
    • Wenn ich den Service innerhalb des Containers
      my_init---runsvdir-+-runsv---run---supervisord-+-gunicorn---gunicorn
                         |                           |-nginx---8*[nginx]
                         |                           |-python---9*[python]
                         |                           |-python---python  (Django)
                         |                           '-redis-server---2*[{redis-server}]
                         '-runsv
      
      ausführe, werden die Protokolle coloriert.
    • Von außen werden die Docker-Compose-Protokolle jedoch nicht eingefärbt.

Ich habe versucht,

hinzuzufügen
[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
in meinen Diensten wie beschrieben hier , aber es scheint, dass es nicht mehr funktioniert.

Irgendeine Idee?

    
matt 25.11.2016, 11:11
quelle

1 Antwort

3

Hier ist ein minimales Arbeitsbeispiel für Django-Anwendung, die mit Gunicorn geliefert wird. Der Trick besteht darin, sicherzustellen, dass Gunicorn-Protokollierer für die Verwendung eines Handlers konfiguriert sind, der einen farbigen Formatierer verwendet.

settings.py

%Vor%

Terminalausgabe

Bonus

Der beste Weg (aus meiner Erfahrung), Ihre Logging-Konfiguration zu überprüfen, ist logging_tree .

Führen Sie das einfach in Ihrem Anwendungskontext aus (zB in der Django Shell)

%Vor%

und es sollte eine schöne Darstellung der vorhandenen Logger drucken.

Ich ging einen Schritt weiter und fügte dies meinem urls.py hinzu, damit ich die Protokollierungskonfiguration sehen konnte, nachdem alle Logger installiert wurden.

%Vor%

Es sollte etwas Ähnliches zurückgeben

%Vor%     
Nour Chawich 13.05.2017 16:53
quelle