0

Как заставить логгер удалять существующий файл журнала перед записью в него?

1

У меня возникла проблема с логированием в Python. Используя приведённую ниже конфигурацию, мой лог-файл называется 'test-debug.log' и растёт бесконечно каждый раз, когда я запускаю скрипт. Я хочу, чтобы этот лог-файл содержал записи логов только с последнего запуска скрипта. Лог должен удаляться перед новым запуском.

Как это сделать?

logger = logging.getLogger('test')  # Создаем лог с тем же именем, что и скрипт
logger.setLevel('DEBUG')

# Создаем обработчики и устанавливаем их уровень логирования
filehandler_dbg = logging.FileHandler(logger.name + '-debug.log')
filehandler_dbg.setLevel('DEBUG') 

# Создаем настраиваемые форматы лог-записей, подходящие как для лог-файла, так и для консоли
streamformatter = logging.Formatter(fmt='%(levelname)s:\t%(threadName)s:\t%(funcName)s:\t\t%(message)s', datefmt='%H:%M:%S') 

# Применяем форматы к обработчикам
filehandler_dbg.setFormatter(streamformatter)

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

Буду признателен за помощь!

1 ответ(ов)

0

Если вы используете внешний файл конфигурации для настроек логирования, убедитесь, что в аргументах обработчика ('handler') вы передаете 'w' для режима записи. Это позволяет создать или перезаписать файл логов. Ваш файл конфигурации может выглядеть следующим образом:

[loggers]
keys=root

[logger_root]
level=DEBUG
handlers=file_handler

[handlers]
keys=file_handler

[handler_file_handler]
class=FileHandler
formatter=formatter
args=("../log/test" + time.strftime("%%Y%%m%%d%%H%%M%%S") + '.log', 'w')

[formatters]
keys=formatter

[formatter_formatter]
format=%(asctime)s %(levelname)-5s [%(module)s] %(message)s

Обратите внимание, что в строчке args после имени файла указан режим 'w', что указывает на необходимость записи в лог-файл.

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь