2012-02-09 9 views
7

Webプロジェクトでdjango + uwsgiを使用しています。しかし、私はしばらくの間、uwsgiが実行された後にいくつかのdjangoログが失われることを発見しました!複数のプロセスを持つuwsgiでホストすると、いくつかのdjangoのログが失われる

状況は次のとおりです。私は8プロセスでuwsgiを設定します。 uwsgiを起動すると、すべてのdjangoログが単一のログファイルに書き込まれます。しかし、数時間後、いくつかのログはファイルに書き込まれません。私はdjangoログファイルをuwsgiログファイルと比較しました。私はただ一つのuwsgiプロセスの要求がdjangoファイルで書かれていることを発見しました。他の7つのプロセスのdjangoログがありませんでした。 uwsgiを再起動すると、同じ結果になります。

誰でもこれについて知っていますか?

おかげで、

私のDjangoのログ設定:

LOGGING = { 
'version': 1, 
'disable_existing_loggers': False, 
'formatters': { 
    'simple': { 
     'format': '%(levelname)s %(asctime)s %(message)s' 
    }, 
    'detail': { 
     'format': '%(levelname)s %(asctime)s [%(module)s.%(funcName)s line:%(lineno)d] %(message)s', 
    }, 
}, 
'handlers': { 
    'file': { 
     'level': 'INFO', 
     'formatter': 'simple', 
     'class': 'logging.handlers.TimedRotatingFileHandler', 
     'filename': LOG_FILE, 
     'when': 'midnight', 
     'backupCount': 366, 
    }, 
    'err_file': { 
     'level': 'WARN', 
     'formatter': 'detail', 
     'class': 'logging.handlers.TimedRotatingFileHandler', 
     'filename': LOG_ERR_FILE, 
     'when': 'midnight', 
     'backupCount': 366, 
    }, 
}, 
'loggers': { 
    'django_request': { 
     'handlers': ['file', 'err_file'], 
     'level': 'DEBUG', 
     'propagate': True, 
    }, 
} 
} 

私uwsgiの設定:いくつかの労働者から同じファイルに書き込みをしても安全ではないので

<uwsgi> 
<socket>0.0.0.0:8888</socket> 
<chdir>src_dir</chdir> 
<pythonpath>..</pythonpath> 
<module>wsgi</module> 
<workers>4</workers> 
<processes>8</processes> 
<master>true</master> 
<pidfile>uwsgi.pid</pidfile> 
<enable-threads>true</enable-threads> 
<logdate>true</logdate> 
<daemonize>/log/uwsgi/uwsgi.log</daemonize> 
</uwsgi> 

答えて

2

はこれがあります。 あなたは各ワーカーから別のファイルにログを書き込む、またはの、SysLogHandlerを使用してみてください

http://docs.python.org/library/logging.handlers.html

/etc/rsyslog.d/local-myapp.conf:

local0.*       -/var/log/myapp/app.log 

settings.py:

LOGGING = { 
    'version': 1, 
    'disable_existing_loggers': False, 
    'filters': { 
     'user': { 
      '()': 'core.log.UserFilter', 
     } 
    }, 
    'formatters': { 
     'verbose': { 
      'format': '%(levelname)s %(asctime)s %(module)s %(process)d %(thread)d %(user)s %(message)s' 
     }, 
     'simple': { 
      'format': '%(levelname)s %(asctime)s %(module)s %(user)s %(message)s' 
     }, 
    }, 
    'handlers': { 
     'mail_admins': { 
      'level': 'ERROR', 
      'class': 'django.utils.log.AdminEmailHandler', 
      'filters': ['user'], 
     }, 
     'syslog':{ 
      'level': 'INFO', 
      'class': 'logging.handlers.SysLogHandler', 
      'formatter': 'verbose', 
      'filters': ['user'], 
      'facility': 'local0', 
      'address': '/dev/log', 
     }, 
    }, 
    'loggers': { 
     'django.request': { 
      'handlers': ['mail_admins'], 
      'level': 'ERROR', 
      'propagate': True, 
     }, 
    }, 
    'root': { 
     'handlers': ['syslog'], 
     'level': 'INFO', 
    } 
} 

ログメッセージをコンソールに書き込んで、uwsgiにログを書き込ませることもできます。

関連する問題