Найти - Пользователи
Полная версия: Как удалить файлы, записанные через промежутки времени в одном коде с помощью loguru?
Начало » Центр помощи » Как удалить файлы, записанные через промежутки времени в одном коде с помощью loguru?
1 2
VitaliiF
Здравствуйте! Столкнулся с проблемой. Написал код при помощи loguru. Использовал функцию retention и устанавливал время очистки лога, ничего не срабатывает, как были записанные файлы с данными так и остались. Как понял, чтобы одновременно записывать файлы и их же удалять в одном коде, нужно использовать функцию close (закрыть файлы после записи) или with, но не получилось. Если кто понимает, что можно сделать с этим, пожалуйста помогите!

КОД прилагаю в файле.
py.user.next
Опиши, как ты видишь процесс логирования в своей программе. Какие файлы, куда удалять, зачем удалять?
VitaliiF
Смысл логгирования в программе заключается в том, чтобы записать текст кода в файл (zip, блокнот и т.д.) и после получив результат их нужно удалить или очистить, без разницы. Насчёт куда удалять непонял. Удалить нужно исходя из поставленного условия. Если простыми словами - запуск программы…запись первого файла…запись второго файла… запись третьего файла… и после их поочередное удаление.
FishHook
VitaliiF
В вашем коде нет retention, покажите пожалуйста код (не надо его прилеплять файлом!!!) в котором вы используете retention
VitaliiF
    
import time
from loguru import logger
logger.add("debug1.log", format="{time}  {level}  {message}", level="DEBUG", retention="30 seconds")
for _ in range(2):
    a = 5
    logger.debug(f"{a}")
    logger.info("Hello, World (info)!")
    logger.error("Hello, World (error)!")
    time.sleep(2)
logger.add("debug2.log", format="{time}  {level}  {message}", level="DEBUG", retention="50 seconds")
for _ in range(2):
    a = 6
    logger.debug(f"{a}")
    logger.info("Hello, World (info)!")
    logger.error("Hello, World (error)!")
    time.sleep(4)
logger.add("debug3.log", format="{time}  {level}  {message}", level="DEBUG", retention="70 seconds")
for _ in range(2):
    a = 7
    logger.debug(f"{a}")
    logger.info("Hello, World (info)!")
    logger.error("Hello, World (error)!")
    time.sleep(6)
FishHook
VitaliiF
все работает
запустите ваш пример, увидите три файла логов. Подождите минуту. Закомментируйте одну секцию

 import time
from loguru import logger
logger.add("debug1.log", format="{time}  {level}  {message}", level="DEBUG", retention="30 seconds")
for _ in range(2):
    a = 5
    logger.debug(f"{a}")
    logger.info("Hello, World (info)!")
    logger.error("Hello, World (error)!")
    time.sleep(2)
logger.add("debug2.log", format="{time}  {level}  {message}", level="DEBUG", retention="50 seconds")
# for _ in range(2):
#     a = 6
#     logger.debug(f"{a}")
#     logger.info("Hello, World (info)!")
#     logger.error("Hello, World (error)!")
#     time.sleep(4)
logger.add("debug3.log", format="{time}  {level}  {message}", level="DEBUG", retention="70 seconds")
for _ in range(2):
    a = 7
    logger.debug(f"{a}")
    logger.info("Hello, World (info)!")
    logger.error("Hello, World (error)!")
    time.sleep(6)

запустите код опять, увидите что файл debug2.log был удален
py.user.next
VitaliiF
Смысл логгирования в программе заключается в том, чтобы записать текст кода в файл (zip, блокнот и т.д.) и после получив результат их нужно удалить или очистить, без разницы.
Почему ты не можешь их удалять просто через os.remove() ?
  
#!/usr/bin/env python3
 
import time
import os
import loguru
 
loguru.logger.add(
    'file1.log',
    format='{time} {level} {message}',
    level='DEBUG')
 
for i in '123':
    loguru.logger.debug('Hello ' + i)
    time.sleep(10)
 
os.remove('file1.log')
 
loguru.logger.add(
    'file2.log',
    format='{time} {level} {message}',
    level='DEBUG')
 
for i in '456':
    loguru.logger.debug('Hello ' + i)
    time.sleep(10)
 
os.remove('file2.log')

VitaliiF
Насчёт куда удалять непонял.
Зачем писать логи, если ты их удаляешь сразу? Логи пишут обычно для того, чтобы читать их потом, когда найдётся время.

VitaliiF
Если простыми словами - запуск программы…запись первого файла…запись второго файла… запись третьего файла… и после их поочередное удаление.
Поочерёдность удаления ты можешь сделать через os.remove().

И зачем тебе это логер? Сделай свой логер, который пишет в заданный файл и может в любое время принимать в качестве аргумента любой файл, а не вводит тупую глобальную переменную, живущую до конца программы. Понимаешь, ты с этими тупыми логерами много независимых логеров не создашь. Они все привязываются к единой системе, которая обычно нахер не упала в большой модульной программе. Так эта тупая система ещё и долгое время поддерживала только старое форматирование строк и всё никак не могла ввести .format(), которому было уже несколько лет, тогда как .format() мощнее старого форматирования строк, потому что гораздо гибче. Когда все перешли на .format() со старых строк, эта херомантия logging требовала от строк только старый формат, который ограничен изрядно. В новом формате ты можешь переопределить метод __format__() и сделать вообще свой язык форматирования.
  
>>> class Int(int):
...     def __format__(self, spec):
...         if spec.startswith('repeat'):
...             return str(self) * int(spec[6:])
...         else:
...             return super().__format__(spec)
... 
>>> n = Int(4)
>>> s0 = '{:05d}'.format(n)
>>> s1 = '{:repeat5}'.format(n)
>>> s2 = '{:repeat8}'.format(n)
>>> 
>>> print(s0, s1, s2)
00004 44444 44444444
>>>
FishHook
py.user.next
эта херомантия logging требовала от строк только старый формат
херомантия в общем-то не настаивает, подавай туда форматированные строки, ей пофигу. Сишный стиль форматирования используется в целях перформанса, питоний формат донельзя тормозной
FishHook
которая обычно нахер не упала в большой модульной программе.
как раз там она и упала
py.user.next
Сделай свой логер,
и не забудь пропатчить фреймворки типа Джанги, которые внезапно тоже хотят чего-нибудь такого пологировать
VitaliiF
Большое спасибо всем за разъяснения!
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB