2011-12-13 3 views
4

웹 프로젝트에 django + uWSGI를 사용하고 있습니다. 그러나 모든 로그가 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

당신은 단지 장고 로깅 시스템 및 uWSGI를 혼합 /var/log/uwsgi.log하는 damonize합니다

을 /var/log/uwsgi.log.

'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 로그에 기록 저장을위한 열쇠입니다.

는 그리고 당신은 'filename': os.path.join(LOG_BASE, 'err.log'),

+1

감사합니다. 문제가 해결되었습니다. –

0

나는 문제가 생각을 uwsgi.xml의 daemonize 태그입니다.

문서 (http://projects.unbit.it/uwsgi/wiki/Doc)의 말 :

인용문 실행 로그 파일 또는 UDP 서버

--daemonize를 사용하여 백그라운드에서 프로세스 uWSGI 쓰기 로그 메시지가

+0

에 저장 로그를 장고하지만 난 /var/log/uwsgi.log는 데몬 프로세스 로그, 나의 응용 프로그램 로그를 포함한다고 생각합니다. –

+0

python 콘솔에서 logger.info ('blabla')를 실행하려고하면 어떻게됩니까? –

+0

'logger.info ('blabla')'에 대해 아무것도 얻지 못했습니다. –

관련 문제