Как ограничить размер файла журнала в python

Я использую windows 7 и python 2.7. Я хочу ограничить размер файла журнала до 5 Мб. Мое приложение при запуске записывает в файл журнала, а затем завершает работу. Когда мое приложение запустится снова, оно будет записывать в тот же файл журнала. Таким образом, приложение не работает непрерывно. App инициирует, обрабатывает и завершает работу.

мой код для регистрации является:

import logging
import logging.handlers
logging.basicConfig(filename=logfile.log, level="info", format='%(asctime)s %(levelname)s %(funcName)s(%(lineno)d) %(message)s')
logging.info("*************************************************")

Я пробовал с RotatingFileHandler но это не работает

logging.handlers.RotatingFileHandler(logFile, mode='a', maxBytes=5*1024*1024, backupCount=2, encoding=None, delay=0)

Итак, как я могу обеспечить размер файла ограничение в Python?

2 ответов


потеряйте basicConfig и попробуйте следующее:

import logging
from logging.handlers import RotatingFileHandler

log_formatter = logging.Formatter('%(asctime)s %(levelname)s %(funcName)s(%(lineno)d) %(message)s')

logFile = 'C:\Temp\log'

my_handler = RotatingFileHandler(logFile, mode='a', maxBytes=5*1024*1024, 
                                 backupCount=2, encoding=None, delay=0)
my_handler.setFormatter(log_formatter)
my_handler.setLevel(logging.INFO)

app_log = logging.getLogger('root')
app_log.setLevel(logging.INFO)

app_log.addHandler(my_handler)

while True:
    app_log.info("data")

это работает на моей машине


при использовании ведение журнала.basicConfig с файлом журнал прикрепляется с помощью обработчика файлов для обработки записи в файл. после этого вы создали другой обработчик файла для того же файла с ведение журнала.дрессировщики.RotatingFileHandler

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

Это можно увидеть, если вы посмотрите непосредственно на обработчики файлов журнала -

import logging
from logging.handlers import RotatingFileHandler

log_name = 'c:\log.log'
logging.basicConfig(filename=log_name)
log = logging.getLogger()
handler = RotatingFileHandler(name,maxBytes=1024,backupCount=1)
log.addHandler(handler)


[<logging.FileHandler object at 0x02AB9B50>, <logging.handlers.RotatingFileHandler object at 0x02AC1D90>]