2013-11-01 2 views
9

Я попытался изменить уровень отладки на DEBUG в Django, потому что хочу добавить некоторые отладочные сообщения в свой код. Кажется, это не имеет никакого эффекта.Django: как установить уровень журнала для INFO или DEBUG

Моя конфигурация регистрации:

LOGGING = { 
    'version': 1, 
    'disable_existing_loggers': False, 
    'formatters': { 
     'simple': { 
      'format': '%(levelname)s %(message)s' 
     }, 
    }, 
    'handlers': { 
     'console':{ 
      'level':'DEBUG', 
      'class':'logging.StreamHandler', 
      'formatter': 'simple' 
     }, 
    }, 
    'loggers': { 
     'django.request':{ 
      'handlers': ['console'], 
      'propagate': False, 
      'level': 'DEBUG', 
     }, 
    }, 
} 

Код:

import logging ; logger = logging.getLogger(__name__) 
logger.debug("THIS MESSAGE IS NOT SHOWN IN THE LOGS") 
logger.warn("THIS ONE IS") 

Вывод на консоль:

WARNING:core.handlers:THIS ONE IS 

Я также попытался установить DEBUG = False и DEBUG = True в моем файл настроек. Есть идеи?

Edit: Если установить уровень журнала на регистраторе непосредственно, она работает:

import logging ; logger = logging.getLogger(__name__) 
logger.setLevel(logging.DEBUG) 
logger.debug("THIS MESSAGE IS NOT SHOWN IN THE LOGS") 

Выход:

DEBUG:core.handlers:THIS MESSAGE IS NOT SHOWN IN THE LOGS 
WARNING:core.handlers:THIS ONE IS 

Но: Кажется, конфигурационный файл полностью игнорируется. Он печатает оба оператора всегда, даже если я установил обе записи в конфигурации обратно в ERROR. Это правильное поведение, или я все еще что-то пропустил?

+0

Быстрая проверка: 'logger.warn (» Уровень журнала установлен на {0} ". Format (logging.getLevelName (logger.level))) –

+0

ВНИМАНИЕ: core.handlers: Уровень журнала установлен на NOTSET. Итак, это уровень по умолчанию, который ПРЕДУПРЕЖДЕНИЕ, правильно? Почему Django не меняет его в соответствии с моими настройками? – kev

+0

* мигает * Huh. Я ничего не получил. Мне кажется, что вы все делаете правильно. –

ответ

7

Вам необходимо добавить, например,

'core.handlers': { 
    'level': 'DEBUG', 
    'handlers': ['console'] 
} 

параллельно с django.request входа или

'root': { 
    'level': 'DEBUG', 
    'handlers': ['console'] 
} 

параллельно строке 'Лесорубы'. Это гарантирует, что уровень установлен на регистраторе, который вы используете, а не только на регистраторе django.request.

Обновление: Чтобы отображать сообщения для всех ваших модулей, просто добавьте записи вместе с django.request, чтобы включить модули верхнего уровня, например. api, handlers, core или что угодно. Поскольку вы не указали точно, что такое иерархия пакетов/модулей, я не могу быть более конкретным.

+2

Это работает. Но есть ли способ показать только мои журналы отладки?Если я установил запись «root», я получаю все запросы sql в журнале, который мне неинтересен. Установка core.handlers ограничивает вывод отладки на core.handlers. Но я хотел бы увидеть весь отладочный вывод в моих файлах (все handlers.py, api.py и что у меня есть). – kev

+1

@ kev Вы нашли решение? :) – DataGreed

+1

Вид. Я создал собственный регистратор файлов, как здесь: http://pastebin.com/srT4mSdu, журнал импорта logger = logging.getLogger ('custom') logger.setLevel (logging.DEBUG) – kev

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