Сообщения журнала Python печатаются дважды при импорте пакета, который сам использует журналирование.Python

Программы на Python
Ответить
Anonymous
 Сообщения журнала Python печатаются дважды при импорте пакета, который сам использует журналирование.

Сообщение Anonymous »

При импорте внешнего пакета, такого как open3d, который использует функцию ведения журнала Python, мои собственные журналы печатаются дважды.
Смотрите этот пример:

Код: Выделить всё

import logging
import open3d as o3d

logger = logging.getLogger(__name__)

def main():
# set base level of logger on a module level
logger.setLevel(logging.DEBUG)
# create file handler which logs even debug messages
fh = logging.FileHandler('log.log')
fh.setLevel(logging.DEBUG)
# create console handler with a higher log level
ch = logging.StreamHandler()
ch.setLevel(logging.INFO)
# create formatter and add it to the handlers
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
fh.setFormatter(formatter)
ch.setFormatter(formatter)
# add the handlers to the logger
logger.addHandler(fh)
logger.addHandler(ch)

logger.info('This gets printed twice to console and once to log file.')

if __name__=="__main__":
main()
Вывод на консоль:

Код: Выделить всё

2022-03-29 15:06:20,533 - __main__ - INFO - This gets printed twice to console and once to log file.
INFO - 2022-03-29 15:06:20,533 - test - This gets printed twice to console and once to log file.
Каков будет стандартный способ обработки такого случая, когда средство ведения журнала существует во внешнем пакете? Есть ли возможность перехватить логгер из open3d и включить его сообщения в свой собственный логгер? Могу ли я вообще отключить звук?
Спасибо за помощь!
Решение, которое сработало для меня:

С подсказкой Благодаря ответу @Cargo23 и помощи этого вопроса я смог проверить все регистраторы и обработчики и нашел StreamHandler в RootLogger.
С помощью этих строк сразу после импорта я смог удалить его:

Код: Выделить всё

rootlogger = logging.getLogger()
rootlogger.handlers.pop()
Однако меня не полностью устраивает это решение, поскольку оно не кажется очень универсальным.


Подробнее здесь: https://stackoverflow.com/questions/716 ... use-loggin
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»