Установить уровни ведения журнала
Я пытаюсь использовать стандартную библиотеку для отладки моего кода:
Это прекрасно работает:
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')
Надеюсь, что это поможет вам...