Вход в Python в разных системах показывает разный формат / уровень

1

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

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

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

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

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

Спасибо заранее,

Теги:
logging

3 ответа

1
Лучший ответ

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

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

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

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

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

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

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

  • 0
    Спасибо за вашу помощь
0

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

  • 0
    Спасибо за предложение. Кажется, что один модуль, импортированный моей программой, только на сервере регистрирует что-то перед тем, как моя программа сконфигурирует модуль регистрации. Тогда все журналы не так, как я хочу. Если в моей программе я импортирую и настраиваю логирование в первой строке. Тогда все работает так, как я хочу.
0

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню