Найти - Пользователи
Полная версия: loggining в threading
Начало » Python для новичков » loggining в threading
1
Misha_White
Доброго дня, уважаемые.

Работаю в многопоточном режиме (работа с com-портами).
Хочу разделить логи: для каждого потока: свой файл.
Правильно ли я действую? Вызываю в target'ах get_logger() с уникальным идентификатором (именем) и именем файла.
Логи по потокам разделились, но если добавить консоль (закомменчено), то в консоли строки задваиваются. Опять же, если в разных потоках указать одно и то же имя логгера и имя файла, то получаю задвоение строк. Если разные имена логгера, и одно имя файла, то задвоения нет, но не уверен, что оно друг другу не будет мешать (одновременная запись из разных потоков).
Как быть с выводом в консоль? Использовать его только во время тестирования?
Что посоветуете?

 def get_logger(logger_name, filename):
    logger = logging.getLogger(logger_name)
    logger.setLevel(logging.INFO)
    fh = RotatingFileHandler(filename, mode='a', maxBytes=5 * 1024 * 1024, backupCount=500)
    formatter = logging.Formatter('%(asctime)s\t-\t'
                                  '%(levelname)s\t-\t'
                                  '%(name)s\t-\t'
                                  '%(threadName)s\t-\t'
                                  '%(message)s')
    fh.setFormatter(formatter)
    logger.addHandler(fh)
    # создать обработчик консоли и установить уровень для отладки
    # ch = logging.StreamHandler()
    # ch.setLevel(logging.DEBUG)
    # logger.addHandler(ch)
    return logger

UPD: Пишется всё (со всех потоков) в основной логгер (как не предполагалось) и дополнительно по отдельным файлам (как предполагалось).

UPD2: В основной лог пишется, если потоковые логи создавать как потомков (“main.children”).
ZerG
Задвоение идет потому что вы вызываете повторно функцию
В случае с выводом по разным файлам - это допустимо так как каждая строка идет в свой файл
А вот “консоль” у вас физически одна по этому и двоятся сообщения
Для начала попроуйте создать класс вместо фукнции
Тогда у вас получится обьект и уже его используйте для выхлопа

This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB