2012-11-20 15 views
22

Ben ngninx arkasında gunicorn çalıştırıyorum. Gunicorn hatalarını gunicorn-error.log ve access log'ları gunicorn-access.log dosyasına kaydetmek istiyorum.Gunncorn çalışmak için erişim günlüğü alınamıyor

Hata günlüğünü çalışıyorum ama erişim günlüğünü değil, ne yapıyorum yanlış?

#!/bin/bash 
set -e 
ENV=/home/my/env/bin/activate 
GUNICORN=gunicorn_django 
SETTINGS_PATH=/home/my/app/app/settings 
PROJECT_PATH=/home/my/app 
CONFROOT=/home/my/app/conf/gunicorn.conf.py 

cd $SETTINGS_PATH 
source $ENV 
export PYTHONPATH=$PROJECT_PATH 
exec $GUNICORN app.settings.staging -c $CONFROOT 

Bu gunicorn-error.log ve gunicorn-access.log ama hem oluşturur: Bu gunicorn çalıştırmak script

bind = '127.0.0.1:8888' 
backlog = 2048 
workers = 3 
errorlog = '/home/my/logs/gunicorn-error.log' 
accesslog = '/home/my/logs/gunicorn-access.log' 
loglevel = 'debug' 
proc_name = 'gunicorn-my' 
pidfile = '/var/run/my.pid' 

:

Bu

benim gunicorn.conf.py olduğunu yanlış

2012-11-20 11:49:57 [27817] [INFO] Starting gunicorn 0.14.6 
2012-11-20 11:49:57 [27817] [DEBUG] Arbiter booted 
2012-11-20 11:49:57 [27817] [INFO] Listening at: http://127.0.0.1:8888 (27817) 
2012-11-20 11:49:57 [27817] [INFO] Using worker: sync 
2012-11-20 11:49:58 [27825] [INFO] Booting worker with pid: 27825 
2012-11-20 11:49:58 [27828] [INFO] Booting worker with pid: 27828 
2012-11-20 11:49:58 [27830] [INFO] Booting worker with pid: 27830 

yapıyorum: sadece gunicorn-error.log örneğin herhangi günlükleri, alacak? Herkes kendi çalışma gunicorn.conf.py hata günlükleri ve erişim günlükleri ile paylaşmak ister misiniz?

cevap

18

şuna Django benim günlük yapılandırmasını değişti ve yardımcı:

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' 
     }, 
     'generic': { 
      'format': '%(asctime)s [%(process)d] [%(levelname)s] %(message)s', 
      'datefmt': '%Y-%m-%d %H:%M:%S', 
      '()': 'logging.Formatter', 
     }, 
    }, 
    'handlers': { 
     'sentry': { 
      'level': 'ERROR', 
      'class': 'raven.contrib.django.handlers.SentryHandler', 
     }, 
     'console': { 
      'level': 'DEBUG', 
      'class': 'logging.StreamHandler', 
      'formatter': 'verbose' 
     }, 
     'error_file': { 
      'class': 'logging.FileHandler', 
      'formatter': 'generic', 
      'filename': '/home/fungine/gunicorn.error.log', 
     }, 
     'access_file': { 
      'class': 'logging.FileHandler', 
      'formatter': 'generic', 
      'filename': '/home/fungine/gunicorn.access.log', 
     }, 
    }, 
    'loggers': { 
     'django.db.backends': { 
      'level': 'ERROR', 
      'handlers': ['console'], 
      'propagate': False, 
     }, 
     'raven': { 
      'level': 'DEBUG', 
      'handlers': ['console'], 
      'propagate': False, 
     }, 
     'sentry.errors': { 
      'level': 'DEBUG', 
      'handlers': ['console'], 
      'propagate': False, 
     }, 
     'gunicorn.error': { 
      'level': 'INFO', 
      'handlers': ['error_file'], 
      'propagate': True, 
     }, 
     'gunicorn.access': { 
      'level': 'INFO', 
      'handlers': ['access_file'], 
      'propagate': False, 
     }, 
    }, 
} 
+0

teşekkürler! Belki de oraya giriş yapmak daha iyidir. – Mikael

+1

Buradaki sorun, dosya işleyicilerinin birden çok işlem yoluyla oturum açması anlamına gelmez. – dalore

+1

Başka birinin buna yapışması durumunda, Biçimlendirici için belirli bir sınıf belirtmek gerekirse, anahtar ""() "' değil "sınıftır, sınıf anahtarı İşleyiciler içindir. Dokümanlardaki [burada] (https://docs.python.org/2/library/logging.config.html#logging-config-dictschema). – danny

16

benim için 'disable_existing_loggers': Falselogging.config.dictConfig içinde çalışmalarını belirtme.

disable_existing_loggers - False olarak belirtilirse, bu çağrı yapıldığında mevcut kayıt cihazları yalnız bırakılır. Varsayılan, True şeklindedir, çünkü bu, geriye dönük olarak eski bir davranış sağlar. Bu davranışı, veya atalarının günlük yapılandırmasında açıkça adlandırılmadıkça, varolan günlükleri devre dışı bırakmaktır.

http://docs.python.org/2/library/logging.config.html#logging.config.fileConfig

İlgili konular