У меня есть пакет, в котором есть несколько компонентов, которые очень выиграют от использования регистрации и вывода полезной информации.
То, что я не хочу делать, это «настроить» правильное ведение журнала для каждого отдельного файла, где-то вроде этого:
import logging
logging.basicConfig(level=DEBUG)
my_function = logging.getLogger("my_function")
my_class = logging.getLogger("my_class")
Я попробовал пару подходов, один из которых - добавление стандартного кода в класс в служебном модуле и попытка сделать что-то вроде этого:
from util import setlogging
set_logging()
Но даже вышеупомянутое решение не выглядит чистым для меня и может вызвать проблемы, потому что setLogger не имеет __call__
метода. Что мне действительно понравилось, так это то, что мой класс "set_logging" читал из файла конфигурации и имел некоторые значения по умолчанию, так что не было бы никакого значения, какой уровень или какой формат журналирования я хотел, он установил бы его правильно.
Есть ли способ инициализировать правильную регистрацию через доску в моем пакете? Может быть, в файле __init__.py
?
И чтобы быть настолько многословным, насколько это возможно, вот как выглядит setlogging (теперь функция, а не класс):
def setlogging(config=None):
if config == None:
config = config_options() # sets default values
levels = {
'debug': DEBUG,
'info': INFO
}
level = levels.get(config['log_level'])
log_format = config['log_format']
datefmt = config['log_datefmt']
basicConfig(
level = level,
format = log_format,
datefmt = datefmt)