Warum ist mein gunicorn-Prozess ignoriert das log-level-Einstellung mit Django?
Habe ich Nginx, Gunicorn, und Django laufen alle auf der gleichen Ubuntu-EC2-Instanz. Ich habe eine ziemlich konventionelle Einrichtung und möchten, melden sich alle gunicorn Fehler auf eine bestimmte Datei.
Meine Konfiguration für Gunicorn ist:
#!/bin/bash
NAME="server"
GUNICORNDIR=/ebs/env/bin
DJANGODIR=/ebs/server/
SOCKFILE=/tmp/gunicorn.sock
LOGFILE=/var/log/gunicorn/gunicorn.error
USER=ubuntu
GROUP=ubuntu
NUM_WORKERS=5
TIMEOUT=60
DJANGO_SETTINGS_MODULE=settings
DJANGO_WSGI_MODULE=wsgi
echo "Starting $NAME"
RUNDIR=$(dirname $SOCKFILE)
test -d $RUNDIR || mkdir -p $RUNDIR
exec $GUNICORNDIR/gunicorn ${DJANGO_WSGI_MODULE}:application \
--name $NAME \
--workers $NUM_WORKERS \
--timeout=$TIMEOUT \
--user=$USER --group=$GROUP \
--log-level=error --log-file=$LOGFILE \
--bind=unix:$SOCKFILE
Jedoch mit dieser Konfiguration erhalte ich alle logs aus dem DEBUG und oben in die Datei geschrieben. Mein log-level-parameter angezeigt wird, werden immer ignoriert.
Was ich Suche, ist nur diese Arten von log-Nachrichten geschrieben:
2014-01-02 13:54:53 [3327] [CRITICAL] WORKER TIMEOUT (pid:3338)
2014-01-02 13:54:53 [3327] [CRITICAL] WORKER TIMEOUT (pid:3338)
Dachte ich, dass die Django-logging config angegeben in meinem settings.py stören könnte, also ich habe ein hf und ein Datenlogger, um zu versuchen und Ziel gunicorn aber das hat nicht funktioniert.
'handlers': {
'gunicorn': {
'level': 'ERROR',
'class': 'logging.handlers.RotatingFileHandler',
'formatter': 'verbose',
'filename': '/ebs/log/gunicorn.error',
'maxBytes': 1024 * 1024 * 100,
},
}
'loggers': {
'gunicorn.errors': {
'level': 'ERROR',
'handlers': ['gunicorn'],
'propagate': False,
},
Hier sind die Versionen, die ich verwende
Django 1.5.4
Nginx nginx/1.1.19
Gunicorn 18.0
Irgendwelche Gedanken auf, was ist hier falsch?
** Update **
Hier ist, was mein django logging config sieht wie folgt aus:
LOGGING = {
'version': 1,
'disable_existing_loggers': True,
'root': {
'level': 'WARNING',
'handlers': ['sentry'],
},
'formatters': {
'verbose': {
'format': '%(levelname)s %(asctime)s %(module)s %(process)d %(thread)d %(message)s'
},
'simple': {
'format': '%(levelname)s %(asctime)s -- %(message)s'
}
},
'handlers': {
'sentry': {
'level': 'ERROR',
'class': 'raven.contrib.django.raven_compat.handlers.SentryHandler',
},
'sentry_file': {
'level': 'ERROR',
'class': 'logging.handlers.RotatingFileHandler',
'formatter': 'verbose',
'filename': '/ebs/log/sentry_log.txt',
'maxBytes': 1024 * 1024 * 100, # 100 mb
},
'celery': {
'level': 'DEBUG',
'class': 'logging.handlers.RotatingFileHandler',
'filename': '/ebs/log/celery/celery.log',
'formatter': 'verbose',
'maxBytes': 1024 * 1024 * 100,
},
'apps': {
'level': 'DEBUG',
'class': 'logging.handlers.RotatingFileHandler',
'formatter': 'verbose',
'filename': '/ebs/log/apps.log',
'maxBytes': 1024 * 1024 * 100,
},
'apps.dss': {
'level': 'DEBUG',
'class': 'logging.handlers.RotatingFileHandler',
'formatter': 'verbose',
'filename': '/ebs/log/dss_apps.log',
'maxBytes': 1024 * 1024 * 100,
},
},
'loggers': {
'django.db.backends': {
'level': 'DEBUG',
'handlers': ['sentry'],
'propagate': False,
},
'sentry': {
'level': 'DEBUG',
'handlers': ['sentry'],
'propagate': False,
},
'sentry.errors': {
'level': 'ERROR',
'handlers': ['sentry_file', 'sentry'],
'propagate': False,
},
'celery': {
'level': 'INFO',
'handlers': ['sentry', 'celery'],
'propagate': False
},
'apps': {
'level': 'DEBUG',
'handlers': ['apps', 'sentry'],
'propagate': False
},
'apps.dss' : {
'level': 'DEBUG',
'handlers': ['apps.dss', 'sentry'],
'propagate': False,
},
},
}
- Erhalten Sie gunicorn DEBUG-Meldungen im log, oder die von Django?
- Die DEBUG-Meldungen in der Datei kommen von Django.
- Poste bitte die vollständige django logging-Konfiguration, da könnte das problem sein
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den
--log-level
Einstellung des gunicorn betrifft nur gunicorns eigenen Fehler-logging-Funktion. Aber die standard-Fehler und standard-Ausgabe aus Ihrer Anwendung wird auch am Ende in der gunicorn melden. Ich denke, Sie haben vielleicht eineStreamHandler
irgendwo in deinem Django logging config.StreamHandler
Protokollestderr
standardmäßig, so landet es in Ihrem gunicorn melden. Entfernen Sie dieStreamHandler
oder erhöhen Sie den Pegel um Ihr problem zu beheben.IntegrityError
s gefangen von sentry? Sind Sie formatiert, wie Sie Ihre üblichen log-Meldungen? Wenn nicht, könnten Sie am Ende eine andere Art und Weise auf den stderr...StreamHandler
, einige Logger, die nicht behandelt sentry standardmäßig...gunicorn --log-level=debug --logger-class=simple -b :3000 -k gevent -w 5 server:app