[英]Why all application logs are written to uwsgi log?
我正在使用dJango + uWSGI進行Web項目。 但我發現我的所有日志都會被寫入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')
你只需要混合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'),
我認為問題是uwsgi.xml中的daemonize標記
文檔(http://projects.unbit.it/uwsgi/wiki/Doc)說:
Blockquote使用日志文件或udp服務器在后台運行進程
--daemonize /var/log/uwsgi.log
將該日志消息寫入/var/log/uwsgi.log
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.