2013-04-27 2 views
1

Я пытаюсь настроить ведение журнала приложения Django, чтобы весь SQL, сгенерированный ORM Django, регистрировался в sql.log, а все другие зарегистрированные сообщения Django регистрировались в другом файле. Моя каротаж часть setup.py выглядит следующим образом:Настройка журнала Django - SQL и другие сообщения

'version': 1, 
'disable_existing_loggers': False, 
'formatters': ... 
'handlers': { 
    'logfile' : { 
     'class': 'logging.handlers.WatchedFileHandler', 
     'filename': '.../django.log', 
    'formatter': 'verbose', 
    }, 
'sqlfile': { 
    'class': 'logging.handlers.WatchedFileHandler', 
     'filename': '.../sql.log', 
     'formatter': 'simple', 
    }, 
'apache_log': { 
    'class': 'logging.StreamHandler', 
    'level': 'ERROR', 
    'formatter': 'verbose', 
} 
}, 
'loggers': { 
'django': { 
    'handlers': ['logfile', 'apache_log'], 
    'propagate': True, 
    'level': 'INFO', 
}, 
'django.db': { 
    'handlers': ['sqlfile'], 
    'propagate': True, 
     'level': 'DEBUG', 
}, 
} 

SQL действительно получать вход в SQL.LOG, но это также получать вход в django.log, хотя я специально установить LogLevel на регистраторе «Джанго» к ИНФО.

Что мне не хватает?

+1

Может быть установлено '' распространение ': False' для '' django.db'' поможет? – stalk

+0

Но я хочу, чтобы сообщения INFO из django.db записывались вместе с сообщениями INFO из всех других регистраторов django. – zmbq

ответ

1

0 думаю, stalk это право. События, зарегистрированные до django.db, передаются обработчикам, прикрепленным к регистратору django.db, но также будут переданы обработчикам для django и корневому журналу, если только propagate не установлен на False для регистратора django.db. См. this diagram, как работают регистраторы и обработчики.

С установкой propagate до False события, зарегистрированные до django.db, будут переданы только обработчику sqlfile.

Смежные вопросы