Библиотека ведения журналов Python печатает журналы в файле два раза?

Я работаю над проектом Python, где мне придется распечатывать журналы и в то же время хранить журналы в файле. Возникающая проблема заключается в том, что журналы печатаются в консоли предпочтительным способом, когда каждая строка печатается один раз, но журналы сохраняются в файле недопустимым способом, когда каждая строка печатается в файле дважды. Я рассмотрел решение здесь Модуль ведения журнала Python печатает строки несколько раз и реализовал этот, но это не решило проблему. Таким образом, модуль ведения журнала находится в другом файле с именем logs.py, и я вызываю этот файл из других модулей. Обратите внимание, что этот log.py вызывается моими 8 другими модулями, и при вызове он должен иметь только один экземпляр.

#logs.py

import logging
import logging.handlers

def get_name():
    with open("latestLogNames.txt") as f:
        for line in f:
            pass
        latestLog = line
    logfile_name = latestLog[:-1]
    return logfile_name

def setLogger(logfile_name):
    logger = logging.getLogger(__name__)
    if not getattr(logger, 'handler_set', None):
        logger.setLevel(logging.INFO)
        stream_handler = logging.StreamHandler()
        file_handler = logging.FileHandler(logfile_name)
        formatter = logging.Formatter('%(message)s')
        file_handler.setFormatter(formatter)
        logger.addHandler(file_handler)
        logger.addHandler(stream_handler)
        logger.setLevel(logging.INFO)
        logger.propagate = False
        logger.handler_set = True
    return logger

Я вызываю это из другого файла следующим образом:

logger = logs.setLogger(logs.get_name())

Поэтому вместо print(......) я реализую logger.info(......)


person Ashish101    schedule 15.10.2020    source источник
comment
строка не существует вне цикла for. Ваше задание должно быть в месте прохода. Сначала попробуйте это и посмотрите, что произойдет.   -  person cup    schedule 16.10.2020
comment
@cup Я уже проверил это. Он правильно читает последнюю строку из lastLogNames.txt. В этом нет никакой ошибки. Единственная проблема в том, что когда я вызываю setLogger, я предполагаю, что он каким-то образом создает два экземпляра, и поэтому в моем файле журнала печатаются две строки одного типа. Я просто хочу, чтобы он печатал одну строку, а не две одинаковые строки.   -  person Ashish101    schedule 16.10.2020
comment
Использование переменной цикла за рамками цикла не всегда работает. Вы используете if __name__=="__main__' или просто пишете код в файле? Если вы просто пишете код в файл, посмотрите все модули, где это делается — возможно, вы неосознанно вызываете его дважды.   -  person cup    schedule 17.10.2020