Как использовать `logging.handlers.RotatingFileHandler` для управления размером файлов логов?

Используйте logging.handlers.RotatingFileHandler для ротации файлов логов при достижении заданного размера. Основные параметры:
  • filename: Путь к файлу лога.
  • maxBytes: Максимальный размер файла в байтах. После достижения этого размера файл будет ротирован.
  • backupCount: Количество резервных копий логов, которые будут храниться. Старые файлы удаляются, когда их количество превышает это значение.
  • encoding: (Опционально) Укажите кодировку файла.
Пример:

import logging
import logging.handlers

logger = logging.getLogger(__name__)
logger.setLevel(logging.INFO)

handler = logging.handlers.RotatingFileHandler(
    'app.log',
    maxBytes=1024 * 1024,  # 1MB
    backupCount=5,
    encoding='utf8'
)

formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
handler.setFormatter(formatter)

logger.addHandler(handler)

for i in range(10000):
  logger.info(f'Сообщение лога номер {i}')
  
В этом примере создается RotatingFileHandler, который ротирует файл 'app.log', когда он достигает 1MB, и хранит 5 резервных копий.

Для управления размером файлов логов с помощью logging.handlers.RotatingFileHandler, необходимо сконфигурировать его с правильными параметрами:

  • filename: Имя файла лога, куда будут записываться сообщения.
  • maxBytes: Максимальный размер файла лога в байтах. Когда файл достигнет этого размера, он будет ротирован.
  • backupCount: Количество резервных файлов логов, которые будут сохранены. Когда текущий файл достигает maxBytes, он переименовывается (ротируется) в filename.1, затем filename.2, и так далее. Если уже есть backupCount файлов, самый старый файл будет удален.
  • encoding (необязательно): Кодировка файла лога. Рекомендуется указывать 'utf-8'.

Пример использования:

import logging
import logging.handlers

# Настройка логгера
logger = logging.getLogger(__name__)
logger.setLevel(logging.DEBUG) # Устанавливаем минимальный уровень логирования

# Создаем RotatingFileHandler
log_file = 'my_application.log'
max_bytes = 1024 * 1024  # 1MB
backup_count = 5

handler = logging.handlers.RotatingFileHandler(
    log_file,
    maxBytes=max_bytes,
    backupCount=backup_count,
    encoding='utf-8'
)

# Создаем форматировщик логов (Formatter)
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
handler.setFormatter(formatter)

# Добавляем обработчик к логгеру
logger.addHandler(handler)

# Пример использования логгера
logger.debug('Сообщение отладки')
logger.info('Информационное сообщение')
logger.warning('Предупреждение')
logger.error('Ошибка')
logger.critical('Критическая ошибка')

Как это работает:

  1. При запуске программы, сообщения логов записываются в файл my_application.log.
  2. Когда размер файла my_application.log достигает 1MB (maxBytes), происходит ротация.
  3. Файл my_application.log переименовывается в my_application.log.1.
  4. Если файл my_application.log.1 уже существует, он переименовывается в my_application.log.2, и так далее.
  5. Если существует 5 файлов (backupCount), файл my_application.log.5 будет удален, чтобы освободить место для нового файла my_application.log.4, который станет my_application.log.5.

Важно:

  • Убедитесь, что у процесса есть права на запись в указанный файл и директорию.
  • maxBytes должен быть больше 0.
  • backupCount должен быть больше или равен 0. Если backupCount равен 0, старые файлы логов не сохраняются.
  • Выбор значений maxBytes и backupCount зависит от потребностей вашего приложения и доступного дискового пространства.
0