#python #logging
#python #ведение журнала
Вопрос:
Ограничение размера файла журнала в python, насколько я могу судить, может быть выполнено с RotatingFileHandler
помощью атрибута and it maxBytes
.
Чтобы проверить это, я написал следующий скрипт:
import logging
from logging.handlers import RotatingFileHandler
logger = logging.getLogger("Rotating Log")
logger.setLevel(logging.INFO)
# add a rotating handler
handler = RotatingFileHandler("test.log", maxBytes=1)
logger.addHandler(handler)
x = 0
while True:
x = 1
logger.info(x)
Несмотря на то, что размер файла журнала не должен превышать 1 байт, он довольно быстро увеличивается до многих мегабайт. Как я могу это ограничить? К сожалению, документация довольно плохая. Я также хотел знать, как убедиться, что каждый раз, когда я перезапускаю скрипт python, файл журнала очищается и запускается заново, однако в документе просто говорится
class logging.handlers.RotatingFileHandler(filename, mode='a', maxBytes=0, backupCount=0, encoding=None, delay=False)
If mode is not specified, 'a' is used.
Однако в нем не указано, какие другие варианты вместо ‘a’ существуют.
Подводя итог вопросам
- Как я могу ограничить размер файла журнала, скажем, 10 мегабайтами
- Как я могу обеспечить запуск нового файла журнала, если скрипт запущен, а не добавлен старый
Редактировать: я попробовал это с maxBytes = 1000000, но результат остался прежним. Файл журнала продолжает увеличиваться
Комментарии:
1. Я бы не ожидал
maxBytes=1
, что когда- нибудь сработает. Ведение журнала основано на строках, а не на символах. Это может быть просто недопустимым параметром, поскольку практически любое сообщение журнала уже превысит максимальный размер. Получаете ли вы такое же поведение, если задаете более разумноеmaxBytes
значение?2. Я только что попробовал это с maxBytes = 1000000 (1 мегабайт) и увеличил размер строки, чтобы немного ускорить ее. Он увеличился до 1,1 ГБ, прежде чем я прервал. The
Ответ №1:
Вы можете проверить 2-й раздел класса RotatingFileHandler
Ролловер происходит всякий раз, когда длина текущего файла журнала составляет почти макСбайт; но если любой из макСбайт или backupCount равен нулю, ролловер никогда не происходит, поэтому обычно требуется установить backupCount как минимум на 1 и иметь ненулевой maxBytes .
Похоже, вы не установили backupCount
значение.
Когда backupCount не равен нулю, система сохранит старые файлы журнала, добавив расширения ‘.1’, ‘.2’ и т.д. К имени файла.
Например, при резервном кол-ве 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 и т. Д., То они переименовываются в app.log.2, app.log.3 и т. Д. Соответственно.