Форум сайта python.su
Здравствуйте! Столкнулся с проблемой. Написал код при помощи loguru. Использовал функцию retention и устанавливал время очистки лога, ничего не срабатывает, как были записанные файлы с данными так и остались. Как понял, чтобы одновременно записывать файлы и их же удалять в одном коде, нужно использовать функцию close (закрыть файлы после записи) или with, но не получилось. Если кто понимает, что можно сделать с этим, пожалуйста помогите!
КОД прилагаю в файле.
Прикреплённый файлы: Loguru...py (766 байт)
Офлайн
Опиши, как ты видишь процесс логирования в своей программе. Какие файлы, куда удалять, зачем удалять?
Отредактировано py.user.next (Май 17, 2022 13:27:21)
Офлайн
Смысл логгирования в программе заключается в том, чтобы записать текст кода в файл (zip, блокнот и т.д.) и после получив результат их нужно удалить или очистить, без разницы. Насчёт куда удалять непонял. Удалить нужно исходя из поставленного условия. Если простыми словами - запуск программы…запись первого файла…запись второго файла… запись третьего файла… и после их поочередное удаление.
Офлайн
VitaliiF
В вашем коде нет retention, покажите пожалуйста код (не надо его прилеплять файлом!!!) в котором вы используете retention
Офлайн
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 (Май 17, 2022 15:27:33)
Офлайн
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 (Май 17, 2022 15:44:39)
Офлайн
VitaliiFПочему ты не можешь их удалять просто через os.remove() ?
Смысл логгирования в программе заключается в том, чтобы записать текст кода в файл (zip, блокнот и т.д.) и после получив результат их нужно удалить или очистить, без разницы.
#!/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().
Если простыми словами - запуск программы…запись первого файла…запись второго файла… запись третьего файла… и после их поочередное удаление.
>>> 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 >>>
Отредактировано py.user.next (Май 17, 2022 16:38:16)
Офлайн
py.user.nextхеромантия в общем-то не настаивает, подавай туда форматированные строки, ей пофигу. Сишный стиль форматирования используется в целях перформанса, питоний формат донельзя тормозной
эта херомантия logging требовала от строк только старый формат
Офлайн
которая обычно нахер не упала в большой модульной программе.как раз там она и упала
py.user.nextи не забудь пропатчить фреймворки типа Джанги, которые внезапно тоже хотят чего-нибудь такого пологировать
Сделай свой логер,
Офлайн
Большое спасибо всем за разъяснения!
Офлайн