Вход в Python в разных системах показывает разный формат / уровень - PullRequest
1 голос
/ 06 мая 2011

У меня есть простая программа командной строки, написанная на python.Программа регистрируется на экране с помощью модуля регистрации, настроенного следующим образом:

logging.basicConfig(level=logging.INFO, format='%(levelname)-8s %(message)s')

Странно то, что на моем ноутбуке программа регистрирует на нужном уровне (INFO) нужный форматкогда я запускаю программу на сервере, программа регистрирует ошибки и предупреждения только в другом формате.

В обеих системах я использую Python 2.7 в виртуальной среде.Среды не совсем одинаковые.

Я думаю, что какой-то модуль меняет мою конфигурацию.Я не понимаю, почему это происходит только на сервере, но есть ли способ найти какой?

Заранее спасибо,

Ответы [ 3 ]

1 голос
/ 07 мая 2011

API basicConfig() при ведении журнала ничего не сделает (как описано), если в корневом логгере уже настроены обработчики. Ваш вызов basicConfig() может быть проигнорирован, потому что другой код на сервере уже настроил некоторые обработчики для корневого регистратора.

В общем случае код библиотеки не должен добавлять обработчики - это обязанность разработчика приложения. Однако, если вы, например, При разработке веб-приложения с использованием фреймворка в фреймворке уже могут быть настроены некоторые обработчики.

Вы говорите «на сервере», но неясно, говорите ли вы о служебном приложении или просто запускаете служебный скрипт на компьютере, который является сервером. Как вы говорите, виртуальные envs немного отличаются, поэтому разница между ними может быть местом для поиска подсказки.

Чтобы узнать, как настраивать обработчики в корневом логгере, вы можете найти соответствующие источники для basicConfig() или addHandler().

В качестве альтернативы, вы можете явно добавить обработчик, а не полагаться на basicConfig(), чтобы сделать это за вас:

f = logging.Formatter('%(levelname)-8s %(message)s')
h = logging.StreamHandler()
h.setFormatter(f)
logging.getLogger().addHandler(h)

, но это может привести к появлению нескольких сообщений, если к корневому логгеру также будут добавлены другие обработчики консоли.

0 голосов
/ 06 мая 2011

Конфигурация системы регистрации Python уникальна в процессе Python.Если кто-то изменит конфигурацию ведения журнала в процессе, все журналы, созданные в этом процессе, будут следовать этой конфигурации.

0 голосов
/ 06 мая 2011

Если вы считаете, что это определенный модуль, попробуйте заморозить код, используя cx_freeze или Py2exe Это создаст и исполняемый файл, и в него будут помещены необходимые модули, чтобы он не зависел от модулей в системе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...