Я пишу программу резервного копирования с несколькими модулями. В каждом из этих модулей есть несколько классов с некоторыми отладочными и информационными сообщениями. один из этих модулей называется logger.py, который отвечает за создание объекта logger с StreamHandler, RotateHandler и FileHandler, в то время как в другие модули я вставил NullHandler. Цель состоит в том, чтобы иметь возможность импортировать регистратор в файл main.py, который запускает программу и имеет один файл журнала. Здесь упрощена структура папок моего проекта:
├── modules
│ ├── __init__.py
│ ├── module1.py
│ ├── module2.py
│ ├── module3.py
│ ├── logger.py
|
└── main.py
Вот код logger.py
:
def logger():
log_name = mypath/mylog.log
log = logging.getLogger()
log.setLevel(logging.DEBUG)
formatter = logging.Formatter("[%(name)s][%(levelname)s]%(funcName)20s =>%(message)s")
file_handler = logging.FileHandler(log_name)
file_handler.setFormatter(formatter)
log.addHandler(file_handler)
...... other handlers......
return log
в module1
, module2
, module3
в начале файл, который я написал:
import logging.handlers
log = logging.getLogger('module_name')
null_handler = logging.NullHandler()
log.addHandler(null_handler)
в main.py
:
from modules import logger
log = logger()
log.dubug("Some messages..")
log.info("other messages..")
Теперь это работает нормально, за исключением имени модуля, которое выводится как root в выводе, пока я хотел бы выйти с именем модуля, работающего в это время. Странно то, что вывод module1.py
происходит как I w sh, а остальные нет.
Вот пример:
[module1][DEBUG] myfunction => message in module1
[root][DEBUG] <module> => message in main
[root][DEBUG] <module> => message in main
[root][INFO] <module> => message in module2
[root][DEBUG] <module> => message in module3
установка __name__
в log = logging.getLogger()
ничего не изменил