2012-02-09 7 views
7

Używam django + uwsgi dla projektu WWW. Ale odkryłem, że niektóre dzienniki django będą nieobecne, gdy uwsgi będzie działało przez jakiś czas!niektóre dzienniki django są niedostępne, gdy host w uwsgi z wieloma procesami

Sytuacja jest taka: konfiguruję uwsgi z 8 procesami. Po uruchomieniu programu uwsgi wszystkie dzienniki django zostaną zapisane w jednym pliku dziennika. Ale po kilku godzinach niektóre dzienniki nie są zapisywane w pliku. Porównałem plik dziennika django z plikiem dziennika uwsgi. Znalazłem tylko jeden proces zgłoszeń uwsgi został napisany w pliku django. Brakowało pozostałych dzienników django z 7 procesami. Kiedy ponownie uruchamiam uwsgi, jest to ten sam wynik.

Czy ktoś o tym wie?

Dzięki,

mój rejestrowania Django config:

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, 
    }, 
} 
} 

mój uwsgi config:

<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> 

Odpowiedz

2

To dlatego, że nie ma zapisu do tego samego pliku z kilku pracowników bezpieczne. Należy napisać do różnych plików dzienników od każdego pracownika, lub spróbuj użyć 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', 
    } 
} 

Możesz także spróbować pisać komunikaty dziennika w konsoli i pozwolić, aby uwsgi zapisywały dzienniki samodzielnie.