Нужно ли заново создавать журнал регистрации, чтобы он выполнял очистку файла? - PullRequest
0 голосов
/ 16 марта 2020

Я работаю с рассматриваемым кодом: Как использовать RotatingFileHandler Python

В частности, этот бит ...

import logging
from logging.handlers import RotatingFileHandler

logger = logging.getLogger('my_logger')
logger.setLevel(logging.DEBUG)
handler = RotatingFileHandler('my_log.log', maxBytes=2000, backupCount=10)
logger.addHandler(handler)

for _ in range(10000):
    logger.debug('Hello, world!')

Я поставил это на начало моего кода, но мои требования диктуют, что я должен встроить его в демон, поэтому код в ядре приложения будет работать вечно.

Нужно ли заново создавать журнал для очистки журнала, чтобы произошла очистка или проверка производится каждый раз при записи журнала?

1 Ответ

1 голос
/ 16 марта 2020

В соответствии с официальной документацией управление файлами осуществляется автоматически регистратором при записи в файл, поэтому не нужно повторно создавать экземпляр регистратора для запуска этого поведения:

Если backupCount не равен нулю, система сохранит старые файлы журнала, добавив к имени файла расширения «.1», «.2» и c. Например, с backupCount из 5 и базовым именем файла app.log вы получите app.log, app.log.1, app.log.2, до app.log.5. Файл для записи всегда app.log. Когда этот файл заполнен, он закрывается и переименовывается в app.log.1, а если файлы app.log.1, app.log.2, et c. существуют, затем они переименовываются в app.log.2, app.log.3 et c.

Это дополнительно подтверждается исходным кодом метода emit . emit вызывается для фактического занесения в журнал сообщения , когда его уровень серьезности равен или превышает уровень, настроенный в вашем регистраторе :

def emit(self, record):
    """
    Emit a record.
    Output the record to the file, catering for rollover as described
    in doRollover().
    """
    try:
        if self.shouldRollover(record):
            self.doRollover()
        logging.FileHandler.emit(self, record)
    except Exception:
        self.handleError(record)

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

...