2012-11-20 9 views
22

私はngninxの後ろにガンコーンを走らせています。私はgunicornのエラーをgunicorn-error.logに記録し、logをgunicorn-access.logに記録したい。ガンコーンで働くためのアクセスログが得られません

エラーログがありますが、アクセスログはありません。何が間違っていますか?

これは私のgunicorn.conf.pyです:これはgunicornを実行するためのスクリプトです

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' 

#!/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 

それはgunicorn-error.logファイルとgunicorn-のaccess.logの両方を作成しますが、 gunicorn-error.logだけがログを取得します:

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 

私は間違っていますか?誰でも、エラーログとアクセスログで作業しているgunicorn.conf.pyを共有したいですか?

答えて

18

私は次のようにジャンゴに私のロギング設定を変更した、それが助けた:

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

ありがとう!おそらくログを持っている方が良いでしょう。 – Mikael

+1

これは、ファイルハンドラが複数のプロセスを経由してログに記録されることを意味しないという問題があります。 – dalore

+1

他の誰かがこれに執着した場合、Formatterの特定のクラスを指定するためにキーは ''( '' '' class ""ではなく、クラスキーはHandlersのためのものです。ドキュメントの[ここ](https://docs.python.org/2/library/logging.config.html#logging-config-dictschema)に記載されています。 – danny

16

は私にとって'disable_existing_loggers': Falselogging.config.dictConfigで作品を指定します。

disable_existing_loggersからFalseとして指定した場合は、この呼び出しが行われたときに存在するロガーが放置されています。デフォルトはTrue です。これにより、古い動作が後方互換性のある方法で可能になるためです。この の動作は、既存のロガーを無効にすることです。ただし、ロギング設定で祖先の名前が明示的に指定されている場合を除き、既存のロガーはすべて無効にしてください。

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

関連する問題