LINUX.ORG.RU

Взаимоотношения logging и nose.

 , ,


0

1

Есть программа на Python'е состоящая более чем из одного файла .py. В каждом файле есть строки

import logging
logger = logging.getLogger(__name__)

То есть в каждом файле объявлен свой logger (хотя все они привязаны к корневому logger'у).

В коде местами разбросаны вызовы logger.warn(), logger.info() и прочие.

При запуске nosetests естественно в консоль валится некоторое количество сообщений от logger'ов, что засоряет выхлоп (особенно это мешает в логах Jenkins'а). Можно как-то запустить nosetest с опцией подавления вывода логов уровня ниже WARNING или ERROR? --logging-level= не помогает. Вызываю nosetests --logging-level=ERROR, но в консоль всё равно выводятся WARN'ы и INFO.

★★★★★
Ответ на: комментарий от provaton

Плохой путь.

Надо логгинг в своем коде сконфигурировать - http://docs.python.org/2.7/library/logging.html#logging.basicConfig

Это именно то чего я хочу избежать. Это как-то неправильно. Я уже пробовал этот путь, в каждом файле добавить logger.basicConfig(level=logging.ERROR). А если я хочу программу с более подробным журналированием прогнать?

Всё же должен существовать способ управлять уровнем выхлопа через консоль.

Camel ★★★★★
() автор топика
Ответ на: Плохой путь. от Camel

Я уже пробовал этот путь, в каждом файле добавить logger.basicConfig(level=logging.ERROR).

Зачем в каждом? Это достаточно в каком-то одном месте рядом с входной точкой сделать.

Всё же должен существовать способ управлять уровнем выхлопа через консоль.

Из коробки его нет, надо самому.

provaton ★★★★★
()
Ответ на: комментарий от anonymous

Добавить опцию.

Добавь опцию для консольного запуска — уровень логов. По ней и настраивай basicConfig.

Как добавить? Как передавать эту опцию при вызове nosetests?

Camel ★★★★★
() автор топика
Ответ на: комментарий от provaton

Точка входов.

Зачем в каждом? Это достаточно в каком-то одном месте рядом с входной точкой сделать.

А где входная точка у тестов? Количество файлов с тестами примерно соответствует количеству файлов с кодом основной программы, уже сейчас их более дюжины. nosetests дёргает каждый из них по очереди.

Camel ★★★★★
() автор топика
Ответ на: комментарий от anonymous

Plugin?

logcapture plugin?
plugin

Его надо как-то принудительно ставить? Вызов nosetests --logging-level=ERROR не выдаёт ошибку, но и на выхлоп не влияет.

Camel ★★★★★
() автор топика
Ответ на: Plugin? от Camel

Нет, он по умолчанию включен. Просто у меня получается воспроизвести проблему только если поставить --nologcapture (опция плагина).

Может с ним проблема, но вполне может быть, что где-то стоит logging.basicConfig/fileConfig с каким-то извратом.

anonymous
()
Ответ на: Точка входов. от Camel

А где входная точка у тестов?

Не видя кода конкретного совета дать не смогу. В самом худшем случае конфиг логирования пишется в отдельном файле и оттуда импортируется в каждом модуле. Кроме basicConfig там есть еще dictionaryConfig и fileConfig.

provaton ★★★★★
()
Ответ на: комментарий от true_admin

Задать настройки.

Там можно настройки отдельным файлом или словарём задавать. Я думаю это то что тебе нужно.

А как через вызов nosetests передавать что я хочу тот или другой уровень журналирования?

Camel ★★★★★
() автор топика
Ответ на: Задать настройки. от Camel

Я не пользовался nose и не совсем точно представляю как это всё работает. Но разве в теле тестового скрипта нельзя вызвать logging модуль и передать ему нужные параметры? Можно, в конце концов, сделать функцию в твоём коде для конфигурирования логгера и дёргать из тестов её. Типа set_global_level.

true_admin ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.