Работаю в многопоточном режиме (работа с 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”).