Почему все журналы приложений записываются в журнал uwsgi?

Я использую dJango+uWSGI для веб-проекта. Но я обнаружил, что все мои логи будут записываться в лог uwsgi!!

Ситуация такова: когда я пишу запись журнала с помощью logger.xxx, регистратор, который я настроил в settings.py, получит запись журнала, но uwsgi.log также будет иметь запись журнала в этот файл! И самое странное, что в некоторых моих проектах логи моих приложений будут записываться в лог-файлы, как я настроил, а все логи процессов демона записываются в uwsgi.log; но журналы приложений других проектов ТАКЖЕ будут записываться в uwsgi.log!

Вот моя конфигурация ведения журнала:

LOGGING = {
'version': 1,
'disable_existing_loggers': True,
'formatters': {
    'verbose': {
        'format': '%(levelname)s %(asctime)s %(module)s %(process)d %(thread)d %(message)s'
    },
    'detail': {
        'format': '%(asctime)s %(levelname)s %(module)s %(message)s'
    },
    'message_only': {
        'format': '%(asctime)s %(message)s'
    },
    'simple': {
        'format': '%(levelname)s %(asctime)s %(message)s'
    },
},
'handlers': {
    'mail_admins': {
        'level': 'ERROR',
        'class': 'django.utils.log.AdminEmailHandler'
    },
    'file':{
        'level':'DEBUG',
        'class':'logging.handlers.TimedRotatingFileHandler',
        'formatter': 'simple',
        'filename':  os.path.join(LOG_BASE, 'web.log'),
        'when': 'D',
        'backupCount' : 3
    },
    'pref':{
        'level':'DEBUG',
        'class':'logging.handlers.RotatingFileHandler',
        'formatter': 'message_only',
        'filename': os.path.join(LOG_BASE, 'pref.log'),
        'maxBytes': 10 * 1024 * 1024, # 10MB
        'backupCount' : 5
    },
    'err':{
        'level':'ERROR',
        'class':'logging.handlers.TimedRotatingFileHandler',
        'formatter': 'detail',
        'filename': os.path.join(LOG_BASE, 'err.log'),
        'when': 'D',
        'backupCount' : 3
    },
},
'loggers': {
    'django.request': {
        'handlers': ['mail_admins'],
        'level': 'ERROR',
        'propagate': True,
    },
    'myproject' : {
        'handlers': ['file', 'err' ],
        'level': 'INFO',
    },
    'myproject+prefs' : {
        'handlers': ['pref'],
        'level': 'DEBUG',
    }
}
}

И мой uwsgi.xml:

<uwsgi>
<socket>:8888</socket>
<env>DJANGO_SETTINGS_MODULE=myproject.settings</env>
<module>django.core.handlers.wsgi:WSGIHandler()</module>
<processes>4</processes>
<master />
<master-as-root />
<!-- request timeout -->
<harakiri>15</harakiri>
<post-buffering>32768</post-buffering>
<daemonize>/var/log/myproject/uwsgi.log</daemonize>
<listen>32768</listen>
<socket-timeout>4</socket-timeout>
<disable-logging />
</uwsgi>

И вот как я использую ведение журнала:

import logging
from time import time

logger = logging.getLogger('myproject')


logger.info('my log')

person Albert Zhong    schedule 13.12.2011    source источник


Ответы (2)


Вы просто смешиваете систему ведения журнала Django и uWSGI.

'formatters': {
    'simple': {
        'format': '%(levelname)s | %(message)s'
    },
...
    },
'handlers': {
    'console':{
        'level': 'DEBUG',
        'class': 'logging.StreamHandler',
        'formatter': 'simple'
    },
...
},
'loggers': {
    'django.request': {
        'handlers': ['console', ],
        'level': 'DEBUG',
        'propagate': True,
        },
    },

это добавляет регистрацию всех запросов на консоль, и эта запись обрабатывает uWSGI.

'class': 'logging.StreamHandler', это ключ для сохранения журнала в журналах uWSGI.

И ваши журналы Django сохраняются в 'filename': os.path.join(LOG_BASE, 'err.log'),

person b1_    schedule 18.07.2012

Я думаю, проблема в теге daemonize в uwsgi.xml.

В документации (http://projects.unbit.it/uwsgi/wiki/Doc) говорится:

Blockquote Запустите процессы в фоновом режиме, используя файл журнала или сервер udp.

--daemonize /var/log/uwsgi.log

damonize uWSGI записывает сообщения журнала в /var/log/uwsgi.log

person Amedeo Laudisio    schedule 13.12.2011
comment
Но я думаю, что /var/log/uwsgi.log должен содержать только журналы процессов демона, а не журналы моих приложений. - person Albert Zhong; 13.12.2011
comment
Что произойдет, если вы попытаетесь выполнить logger.info('blabla') в консоли Python? - person Amedeo Laudisio; 13.12.2011
comment
Я ничего не получаю за logger.info('blabla'). - person Albert Zhong; 17.03.2012