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('Критическая ошибка')
Как это работает:
my_application.log
.my_application.log
достигает 1MB (maxBytes
), происходит ротация.my_application.log
переименовывается в my_application.log.1
.my_application.log.1
уже существует, он переименовывается в my_application.log.2
, и так далее.backupCount
), файл my_application.log.5
будет удален, чтобы освободить место для нового файла my_application.log.4
, который станет my_application.log.5
.Важно:
maxBytes
должен быть больше 0.backupCount
должен быть больше или равен 0. Если backupCount
равен 0, старые файлы логов не сохраняются.maxBytes
и backupCount
зависит от потребностей вашего приложения и доступного дискового пространства.