У мене є невеликий проект python, який має таку структуру -
Project
-- pkg01
-- test01.py
-- pkg02
-- test02.py
-- logging.conf
Я планую використовувати модуль реєстрації за замовчуванням для друку повідомлень до stdout та файлу журналу. Для використання модуля реєстрації потрібна деяка ініціалізація -
import logging.config
logging.config.fileConfig('logging.conf')
logger = logging.getLogger('pyApp')
logger.info('testing')
В даний час я виконую цю ініціалізацію в кожному модулі, перш ніж розпочати журнал повідомлень. Чи можливо виконати цю ініціалізацію лише один раз в одному місці, щоб ті самі налаштування повторно використовувались при вході в весь проект?
package/__init__.py
. Це звичайно не місце, куди ви вводите if __name__ == '__main__'
код. Крім того, приклад проста виглядає так, що він буде викликати конфігураційний код беззастережно при імпорті, що не відповідає мені. Як правило, реєстраційний конфігураційний код повинен здійснюватися в одному місці і не повинен відбуватися як побічний ефект імпорту, за винятком випадків, коли ви імпортуєте __main__.
if __name__ == '__main__'
? (прямо не йдеться про це, якщо це так)
fileConfig
в кожен модуль, який веде журнал, якщо ви не маєтеif __name__ == '__main__'
логіки в усіх них. відповідь проста не є хорошою практикою, якщо пакет є бібліотекою, хоча це може працювати для вас - не слід налаштовувати вхід у бібліотечні пакети, крім додаванняNullHandler
.