Почему RotatingFileHandler добавляет к старому файлу? - PullRequest
0 голосов
/ 25 февраля 2019

У меня есть хорошая настройка ведения журналов, где я создаю подробные журналы отладки в файл, показывая чистую информацию, записывающуюся в стандартный вывод.Я хотел получить ротацию логов в миксе, поэтому я проверил этот совет: стековая запись (это именно то, что я хочу).Проблема в том, что у меня такая же проблема, как у другого стэка .Может кто-нибудь ответить, почему после того, как мой код вызывает 'doRollover ()', журналы все еще пишутся в logtest.log.1?

#logtest
import sys, os, time, logging, logging.handlers

log_file = r'/logs/test/logtest.log'

needRoll = os.path.isfile(log_file)
rotater=logging.handlers.RotatingFileHandler(log_file, backupCount=5)

log = logging.getLogger()
logging.basicConfig(
    filename=log_file,
    level='DEBUG',
    format="%(asctime)s - %(name)s - %(levelname)s - %(message)s",
    handlers=[rotater])
stdout_handler = logging.StreamHandler(sys.stdout)
stdout_handler.setLevel(logging.INFO)
log.addHandler(stdout_handler)

if needRoll:
    log.debug("Log closed on %s." %time.asctime())
    rotater.doRollover()

log.info('New Log!')

Результаты:

logtest.log = {Пусто}

logtest.log.1 =
2019-02-25 14: 15: 01,372 - root - DEBUG - Журнал закрыт в понедельник, 25 февраля 14:15:01 2019.
2019-02-25 14: 15: 01,381 - root - INFO - Новый журнал!

Редактировать: Исправить под руководством Джона Андерсона:

log_file = r'/logs/test/logtest.log'
needRoll = os.path.isfile(log_file)

log = logging.getLogger()
log.setLevel(logging.DEBUG)

rotater=logging.handlers.RotatingFileHandler(log_file, backupCount=5)
rotater.setLevel(logging.DEBUG)
rotater.setFormatter(logging.Formatter("%(asctime)s - %(name)s - %(levelname)s - %(message)s"))
log.addHandler(rotater)

stdout_handler = logging.StreamHandler(sys.stdout)
stdout_handler.setLevel(logging.INFO)
log.addHandler(stdout_handler)

if needRoll:
    log.debug("Log closed for next run on %s." %time.asctime())
    rotater.doRollover()

log.info('New Log!')

1 Ответ

0 голосов
/ 26 февраля 2019

Джон Андерсон указал мне правильное направление, показав, что установка имени файла в функции basicConfig () может вызывать проблему.Я переписал журналирование без него, и оно отлично работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...