Я работаю над проектом 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(......)
if __name__=="__main__'
или просто пишете код в файле? Если вы просто пишете код в файл, посмотрите все модули, где это делается — возможно, вы неосознанно вызываете его дважды. - person cup   schedule 17.10.2020