Установить уровни ведения журнала

Я пытаюсь использовать стандартную библиотеку для отладки моего кода:

Это прекрасно работает:

import logging
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)
logger.info('message')

Я не могу заставить работать регистратор для нижних уровней:

logging.basicConfig(level=logging.DEBUG)
logger = logging.getLogger(__name__)
logger.info('message')

logging.basicConfig(level=logging.DEBUG)
logger = logging.getLogger(__name__)
logger.debug('message')

Я не получаю никакого ответа ни для одного из них.

Ответ 1

Какая версия Python? Это сработало для меня в 3.4. Но обратите внимание, что basicConfig() не повлияет на корневой обработчик, если он уже настроен:

Эта функция ничего не делает, если для корневого логгера уже настроены обработчики.

Чтобы явно установить уровень для root, выполните logging.getLogger().setLevel(logging.DEBUG). Но убедитесь, что вы вызвали basicConfig() чтобы у корневого регистратора были некоторые настройки. То есть:

import logging
logging.basicConfig()
logging.getLogger().setLevel(logging.DEBUG)
logging.getLogger('foo').debug('bah')
logging.getLogger().setLevel(logging.INFO)
logging.getLogger('foo').debug('bah')

Также обратите внимание, что "Регистраторы" и их "Обработчики" имеют разные независимые уровни журнала. Так что, если вы ранее явно загрузили некоторую сложную конфигурацию логгера в своем скрипте Python, и это испортилось с обработчиком (ами) корневого логгера, то это может иметь эффект, и просто logging.getLogger().setLevel(..) уровень logging.getLogger().setLevel(..) с помощью logging.getLogger().setLevel(..) может не работать. Это связано с тем, что подключенному обработчику может быть независимо установлен уровень журнала. Это вряд ли так, и вам не о чем беспокоиться.

Ответ 2

Я использую следующую настройку для ведения журнала

Конфигурация на основе Yaml

Создайте файл yaml с именем logging.yml, как этот

version: 1

formatters:
    simple:
        format: "%(name)s - %(lineno)d -  %(message)s"

    complex:
        format: "%(asctime)s - %(name)s - %(lineno)d -  %(message)s"


handlers:
    console:
        class: logging.StreamHandler
        level: DEBUG
        formatter: simple

    file:
        class: logging.handlers.TimedRotatingFileHandler
        when: midnight
        backupCount: 5
        level: DEBUG
        formatter: simple
        filename : Thrift.log

loggers:

    qsoWidget:
        level: INFO
        handlers: [console,file]
        propagate: yes

    __main__:   
        level: DEBUG
        handlers: [console]
        propagate: yes

Python - основной

"Основной" модуль должен выглядеть следующим образом:

import logging.config
import logging

with open('logging.yaml','rt') as f:
        config=yaml.safe_load(f.read())
        f.close()
logging.config.dictConfig(config)
logger=logging.getLogger(__name__)
logger.info("Contest is starting")

Подмодули/Классы

Они должны начинаться следующим образом

import logging

class locator(object):
    def __init__(self):
        self.logger = logging.getLogger(__name__)
        self.logger.debug('{} initialized')

Надеюсь, что это поможет вам...