2011-12-13 84 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')'。 –

相關問題