Документы Python говорят, что модуль журналирования является поточно-ориентированным, так что, думаю, мне не нужен LogRlock, верно?
Правильно, вам не нужна блокировка для защиты вашего регистрационного кода.
И еще один вопрос, нужно ли уничтожать экземпляр в конце описанного выше метода? Если да, то как мне это сделать?
Нет, нет. На самом деле, вы не можете уничтожать объекты в Python. Они будут автоматически собираться, когда на них нет ссылок.
Кроме того, объекты Logger
предназначены для сохранения в течение всей жизни вашей программы. Даже если вы можете уничтожить его в конце функции регистрации, вы не должны этого делать.
И это безопасный способ использования модуля регистрации?
Нет, не совсем. Как было отмечено в комментариях, вы выполняете операции настройки на регистраторе (например, добавляете обработчики и средства форматирования) в своем методе ведения журнала, когда вы должны делать это только один раз, в начале вашей программы. То, как вы делаете это сейчас, каждый раз, когда вы регистрируете сообщение, вы добавляете обработчик, и каждый обработчик распечатывает каждое полученное сообщение, так что вы обнаружите, что первое записанное вами сообщение распечатывается один раз, второе одна распечатывается дважды, третья - три раза и т. д., пока вы не залите файлы журналов ненужными копиями сообщений журнала.
Я бы порекомендовал иметь какую-то функцию настройки, которая вызывается один раз в начале вашей программы для настройки поведения ведения журнала. Все о настройке уровней логгера, добавлении обработчиков и добавлении форматеров происходит там. Затем в каждом модуле (.py
файл), где вы используете код регистрации, на уровне модуля вы можете получить соответствующий регистратор и сохранить его в переменной уровня модуля:
logger = logging.getLogger("package.module")
Или, если в модуле используется несколько регистраторов, сделайте это для каждого из них. Внутри каждой функции, где вам нужно зарегистрировать сообщение, вы можете просто сделать
def foo():
...
logger.info("message")
...
Этот вызов logger.info
заменяет ваш LogMethod
.