2012-02-09 7 views
7

Estoy usando django + uwsgi para un proyecto web. ¡Pero descubrí que faltarían algunos registros de django después de que uwsgi se ejecute por un tiempo!algunos registros de django faltan cuando el host en uwsgi con proceso múltiple

La situación es la siguiente: Configuro el proceso uwsgi con 8. Cuando inicio el uwsgi, todos los registros django se escriben en un único archivo de registro. Pero después de unas horas, algunos registros no están escritos en el archivo. Comparé el archivo de registro django con el archivo de registro uwsgi. Encontré que solo se escribieron las solicitudes de un proceso uwsgi en el archivo django. Los otros 7 registros de django del proceso faltaban. Cuando reinicio el uwsgi, es el mismo resultado.

¿Alguien sabe de esto?

Gracias,

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

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

Respuesta

2

Esto se debe a que no es seguro escribir en el mismo archivo de varios trabajadores. Debe escribir registros a diferentes archivos de cada trabajador, o tratar de utilizar 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', 
    } 
} 

También puede tratar de escribir mensajes de registro en la consola y dejar que uwsgi escriba los registros por sí mismo.

Cuestiones relacionadas