У меня есть эта настройка:
main.py
/module
/module/__init__.py (empty)
/module.py
А вот код для моих двух файлов, main.py
и module.py
соответственно:
main.py
import logging
from module import module
logger = logging.getLogger(__name__)
def test():
logger.warning('in main.py/test')
def main():
handler = logging.StreamHandler()
handler.setLevel(logging.INFO)
formatter = logging.Formatter('%(asctime)s %(name)s/%(module)s [%(levelname)s]: %(message)s', '%Y-%m-%d %H:%M:%S')
handler.setFormatter(formatter)
logger.addHandler(handler)
logger.warning('in main.py/main')
module.something()
if __name__ == "__main__":
main()
module.py
import logging
logger = logging.getLogger(__name__)
def something():
logger.warning('in module.py/something')
Итак, я заметил, что это выдает следующее (обратите внимание, что в модуле регистрации нет форматирования):
2019-10-01 09:03:40 __main__/main [WARNING]: in main.py/main
in module.py/something
Похоже, что только после того, как я сделаю правку в main.py
, изменим logger = logging.getLogger( __ name __ )
на logger = logging.getLogger()
или добавим logger = logging.getLogger()
после def main():
, чтобы он регистрировалсявот так (что я и хочу):
2019-10-01 09:04:13 root/main [WARNING]: in main.py/main
2019-10-01 09:04:13 module.module/module [WARNING]: in module.py/something
Почему это так? Я думал, что, поскольку main.py
импортирует module.py
, он, естественно, выше в иерархической шкале, поэтому module.py
наследует настройки регистратора, как определено в main.py
. Нужно ли явно устанавливать корневой логгер (с logger = logging.getLogger()
) в main, чтобы наследование работало? Не правильно ли я настроил структуру папок, чтобы логгер module.py
наследовал настройки логгера main.py
, или структура папок не имеет значения?
Причина, по которой я спрашиваю, заключается в том, что я подумал, что следует использовать logger = logging.getLogger( __ name __ )
повсюду (даже в main.py
), а затем на основе структуры импорта (или структуры папок?), которая определит иерархию, и средства ведения журнала будут наследоваться соответственно. И причина, по которой я сделал это предположение, в том, что, если бы я импортировал main.py
в другую программу? Я предполагаю, что я хочу сделать ведение журнала как можно более универсальным, чтобы я мог импортировать один модуль в другой, и он всегда наследует настройки регистратора родителя. Есть ли способ отобразить основную иерархию всех модулей для целей отладки / обучения?