2011-12-13 141 views
4

我正在使用dJango + uWSGI进行web项目。但是我发现我的所有日​​志都会写入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') 

回答

5

你只混合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'),

+1

谢谢。问题修复了。 –

0

我觉得问题是uwsgi.xml中的守护程序标记

文档(http://projects.unbit.it/uwsgi/wiki/Doc)说:

块引用 运行使用日志文件或一个UDP服务器

--daemonize在后台进程/var/log/uwsgi.log

将damonize uWSGI写日志消息/var/log/uwsgi.log

+0

但我认为/var/log/uwsgi.log应当只包含守护进程日志,不是我的应用程序日志。 –

+0

如果您尝试在python控制台中执行logger.info('blabla')会发生什么? –

+0

我没有得到任何'logger.info('blabla')'。 –

相关问题