Лёгкое логирование в Python с Loguru. Замена встроенной библиотеке logging
ฝัง
- เผยแพร่เมื่อ 26 ก.ย. 2024
- Мой курс «Хардкорная веб-разработка» - course.to.digital
Книжный клуб Ботаним!, где мы читаем хорошие ИТ-книги: botanim.to.dig...
Telegram: t0digital.t.me
Сказать спасибо за это видео можно здесь - boosty.to/digi...
Если использование встроенной в Python библиотеки logging кажется вам сложным и избыточным, то скорее всего библиотека loguru - то, что вам нужно. Поговорим о простом логировании в Python с loguru, установим и сконфигурируем библиотеку, а также покажем несколько быстрых лайфхаков с ней.
/****************** about ******************/
Меня зовут Алексей Голобурдин, я программирую с 2004 года и на этом канале делюсь своим опытом. Я основатель и руководитель компаний:
- Диджитализируй digitalize.team, разрабатываем сложные IT системы для бизнеса;
- Salesbeat salesbeat.pro, комплексный модуль доставки для интернет магазинов.
Если у вас есть проект на разработку, пишите нам на hi@digitalize.team.
С другими предложениями, а также если вам нужна одна или несколько индивидуальных консультаций/уроков по разработке (3000 руб/час), пишите мне на alexey@salesbeat.pro.
Telegram канал - t.me/t0digital
ВК - digital...
RuTube - rutube.ru/chan...
Дзен - dzen.ru/id/623...
Наверное, выскажу общее мнение, что видос как всегда крайне понятный, а самое главное полезный, круто, огонь 👍🏻👍🏻
Спасибооо 🙏
@@t0digital спустя четыре месяца вспомнил о видосе, т.к. на первом крупном боевом проекте логирование превратилось в нечто жуткое.
Миксин, от которого наследуется куча классов с переопределением методов логирования дополнительной информации о состоянии инстанса.
Когда смотришь на uml диаграмму начинаешь понимать что где-то свернул не туда. Да и конфиг logging приближающийся к сотне строчек даже в отдельном файле смотрится не очень красиво.
Вероятнее всего теперь все логирование переведу на loguru. В сумме больше кода, но... явное лучше, чем не явное :)
Спасибо за видео!
@@t0digital Подскажите, пожалуйста, можно ли сделать так, чтобы error писал только в файл без вывода на экран? Благодарю
Оч нравятся видосы на канале в формате - "смотрите есть вот такая полезная штука, сейчас я вам покажу чем"
Когда то участвовал в OLTP проекте (С++, linux). Логировка (несколько дивных С функций) сначала писалась в память , а потом на диск (для производительности). Когда сервис падал, все что было в памяти исчезало. На поиск ошибки уходило , в среднем, несколько дней. Меня попросили исправить баг -- в логах случайным образом появлялась буква "я". Вместо этого я написал новый многопоточный логировщик, который при падении сервиса записывал в файл все предсмертные логи и даже стек вызовов. На поиск и исправление ошибки мы начали тратить , в среднем, 5 минут. Спасибо за видео! Очень важная тема!
Такие видосы не стареют. Приходят новые возжаждавшие знаний, смотрят, пробуют, проникаются. И вот, уже очередной хлопает себя по лбу и идет этой новой дорогой. Классно. Большое спасибо. БОЛЬШОЕ СПАСИБО!
Огромное спасибо за полезную библиотеку! Очень бы хотелось увидеть видео с правилами логирования в python. Везде только описания библиотек, а вот как грамотно и с максимальной пользой вести логи - нет.
Первое правило - использовать logging, потому что все сторонние либы его юзают и он очень гибкий и позволяет прикрутить поверх все что надо. Второе правило - если у вас автономный сервис (бот, веб приложение) не пытаться самостоятельно писать в файл, а отправлять их в stderr, откуда заберут уже journald, fluentd и т.п.. Третье правило - не форматировать строки в логе самостоятельно, пусть в них вставляет данные logging (он это будет делать только если запись реально логируется)
Благодарю за разбор! Пока учусь на DS, затронул недавно лоигрование, даже на данном этапе практически все сказанное было понятно)
Дуже корисне відео для мене! Дякую!
Отличный формат коротких выпусков о таких полезных и приятных плюшках пайтона. Спасибо, познавательно!
Низкий поклон, то что нужно прямо сейчас!
Рад, что полезно!
Спасибо за видео!
Было бы здорово, если бы показали как его в Django проект встроить.
Заинтересовало, буду пробовать. Спасибо!
Здорово! Просто огонь библиотека! Канал Диджитализируй стал уже некоторым проводником в мире технологий
Спасибо огромное.
Действительно куда удобнее, чем принтом в файл записывать
Первое впечатление о логировании благодаря вам хорошее, всё прекрасно понял благодарю
После просмотра остается приятное ощущение, как от передачи с Николаем Николаевичем Дроздовым, «В мире... IT»)) Супер, спасибо за видео! Пойду прикручу логуру к проекту )
Спасибо!
Алексей, ты святой человек. Я проходил целые курсы по логгированию. Думал, ну как же так, в таком лаконичном языке Python могли сделать простейшую функцию записи ошибок в файл так сложно. А оказывается бывает иначе, реально в стилей Пайтон. Просто, функционально, красиво. Спасибо, огромное, человеческое спасибо!
Хоспаде, а я искал тулзу что бы выводить логи в веб интерфейс, и вот он джсон формат, ура
Я такими темпами научусь писать простенькие программы) Вон логирование уже выучил) Спасибо, очень интересно!)
Отличный результат:)!
Наверное это информация для продвинутых пользователей, не понял как создать логин и пароль , спасибо 😊
Большое спасибо. Классные разборы полезных библиотек, продолжайте, пожалуйста.
Спасибо! Будут ещё разборы
Я использую structlog. Помогает делать логи с контекстом, очень удобно
Длинный коооооооммеееннннттттт для продвижения ккккккаааааааааааанннннннннннннаааааааааллллллллллллааааааааааа и Лайк обязательно и подписка однозначно. Все четко и понятно. Без всяких ,, соплей,,
Спасибооо 💪💪💪
Ну это же просто пушка! Огромное спасибо за понятный и приятный видос)
Храни тебя бог!
Спасибо-спасибо!
Огонь. С прошлого видоса начал Го учить (раньше думал о с++). Щас логи буду переписывать на Логуру)) вдохновляешь на дополнительную работу)) Давай ещё с тестированием может что-то? Pytest например. Ещё может подкинешь инфы о компиляции, как это работает, как завязать гошный бинарник с прогой на питоне...
Отлично:) Гошный бинарник завязать с прогой на питоне можно по-разному, через брокер сообщений, например (redis/rabbitMQ/another)
Диджитализируй! Изучу, спасибо
спасибо за наводку, настройка ротейшн ваще по красоте
Дааа, очень удобно
Хорошая либа. Теперь осталось наш легаси проект перевести на 3 версию
успехов вам!
Крутой разбор возможностей библиотеки! Лайк, подписка, все дела
Видосы нравятся, только не хватает старого доброго "Здорово, котаны" - когда слышишь и понимаешь, что сейчас будет что-то полезное, ламповое и интересное)
От души! Отключаю logging)
Как всегда полезно. Спасибо. Ждём новых роликов.
Спасибо! Отличная подача материала. Продолжайте пожалуйста. Очень познавательно и полезно. Привет из Казахстана. Удачи Вам!
Бэлин. Ролик за роликом полезная инфа. Огонёк. Спасибо)
А вот полезное! Годнота, вот даже подпишусь за такое и плюсану!
Очень здорово и понятно обьяснил! С примерами. Прям круто, спасибо :)
Алексей, огромное Вам спасибо! Очень полезные видео.
Рад, что полезно! Спасибо
спасибо, хотелось бы больше разборов таких полезных библиотек
Офигенно. Завтра же начну внедрять
Алексей, спасибо за видео! Как всегда очень полезно! А Вы не подскажете, когда начнется Ваш курс?
Скоро начнется, информация будет на канале
@@t0digital Есть примерные сроки ?
@@t0digital Ждём не дождёмся. Как раз замаячили средства свободные на горизонте. =)
Здравствуйте, Алексей, советую Вам рассказать людям про poetry, по моему мнению это незаменимый инструмент в любом development flow любого проекта, в частности про важность контроля совместимости версий пакетов
Жирный лайк за обзор с 2024 года))
Спасибо. Очень полезно. Буду пользоваться. )
Красиво, конечно, но я уже привык к logging.
Слишком много крови было пролито для его освоения. Я так просто не сдамся, нет!
понимаю:)
Эффект Конкорда :)
Благодарность автору!!! это топчик
Спасибо огромное, вместе с новым деббагером в питоне жить всё круче и легче=)
Очень интересно! Спасибо большое!
В таких видео надо обязательно рассказывать и учить кодеров, что не одними файлами логи едины, еще можно отправить в сислог или другой сборщик или агрегатор логов такой как logstash. Это даст понимание и привьет хорошие привычки
Ну так и видео не прото как хранить логи)
Видео про конкретную либу, методы хранения и инструменты за пределами оного.
А и да, об этом рассказывают конечно в общих темах
после каждого твоего видоса появляется желание продолжать учить кодить!
а это может дать не каждый препод даже за деньги
Красавчик, раскатал как надо
Сначала подумал... А кокой смысл то юзать какую-то другую либу, исли родной логгер и так прост. Но теперь все... спасибо. Моя жизнь никогда не станет прежней... Спасибо за ролик !
loguru кайфовый, дааа
Очень полезно видео. Спасибо.
Жги дальше! ) Лайк!
Больше подобных полезных штук!
Спасибо за видео, как всегда супер!
Очень познавательно! Спасибо!
Видосы по Python, ура!
Кстати, когда начало курса?😁
Скоро будет анонс на канале:)
@@t0digital Уже заваривать чаëк?)
Супер! Спасибо) очень круто!!!!
Рад, что полезно!
большое спасибо, про print уже забыл
Класс! Спасибо 👍
Вот это огонь! Благодарю
Рад, что полезно!
Классный канал по Питону) Подписан всеми акками ибо на разных в разных местах. Сам пактикую сразу практику в приоритете, чем тупо чтение и мечтания.
Беру бумагу и пока на работе сижу, прикидывваю какой у моей будущей проге будет функционал. Сейячас начал сниматьролики по питону, но много еще впереди, а материала валом ибоя в практику окунаюсь с головой чего и вам желаю. Всем добра народ!
Спасибо, так как начал изучать питончика, а до этого знал всего лишь старенький Паскаль и асм на z80, по этому принты принты.....
Спасибо, братишка.
Красиво. Спасибо.
loguru офигенная штука, очень удобна в использовании. Единственное, пришлось мне почесать голову, как бы мне вытащить трейсбэк как в логуру, но чтобы я его перехватил и отправил в другое место.
def capture_exception_output(title: str) -> Optional[str]:
storage = []
sink_id = logger.add(sink=lambda msg: storage.append(msg))
logger.exception(title)
logger.remove(sink_id)
return storage[0] if storage else None
Вроде работает, но есть у меня сомнения, что если в программе будет сразу несколько уровней логгирования, всё это взорвётся к чертям.
Мне кажется, не хватает таки применения этой либы в том же Django.
круть, спасибо)
За логгер отдельный лайк и подписка. =)
Супер!
Спасибо!
Спасибо, пошел убирать принты)
Отличный план!
крутая библиотека
Параметр end="" не завезли. Функция print победила. Расходимся. Конечно же шутка, библа ниче так, но лучше базовый логгер разобрать раз и навсегда. Кстати, я так и не понял, откуда loguru берет время для своих логов по дефолту. Время в моих логах отличается от системного минут на 6
thanks very much
Интересно было бы услышать как они с иерархией логов работают. Наверное это рут лог, а там добавлять можно. Вообще классно что всякая ротация встроена, но в основном это решается внешними инструментами если вы на докере и кубернетесе. Думаю это для самостоятельных приложений только типа десктоп или эмбед.
(какой нибудь комментарий)
Видос в тему, думаю придется добавлять логирование в проект один...
Не придется выдумывать велосипед)
очень круто
Впервые услышал "ротирование" логов) Сначала и не понял
Ротация как-то более корректно будет все же
Круто !!!)
Сними видос по навигации в VIMе )
Команд очень много, вроде как, и не пойму какие запоминать
самое первое видео на канале:)
Диджитализируй! Отлично, спасибо большое ) не заметил видео, так как подписался только на видосе про копирование гигабайтных файлов )
красота!
дааа:)
Удобная либа, жирный лайк
Зачёт, но и сентри тоже по питонячий очень =)
Мега полезно
Ребят, не подскажете пример грамотно структурированного проекта на просторах гитхаб?
А Алексей, как всегда топ)
Включу экстрасенса и предположу, что необходим проект связанный с Django: github.com/mozilla/bedrock
@@amidobox Пока у меня десктопное приложение, но в любом случае спасибо
Посмотрел видео про logging...
"Да ну нахрен! Проще самому с нуля логгер написать, чем каждый раз этого слона настраивать!.."
Посмотрел видео про Loguru...
"Да ну нахрен! Чё велосипед изобретать, если нормальные пацаны уже всё чётко сделали!.." 😅
Библиотека хорошая, однако, плюс logging в том, что это калька с log4j из Java. В .NET такая же калька называется Log4Net, в PHP - это monolog. Привыкаешь уже к подходу-то.
Есть предложение, раз вы сделали видео по логированию в питоне, с использованием этой библиотеки, то... есть почти с таким же названием и с почти таким же интерфейсом библиотека на языке golang. Может вы о ней тоже расскажите? Ну как-бы язык го на этом канале и все такое...
спасибо за идею:)
@Гарри Смит Кхм. Нет.
Крутое видео! А в 2023 году тоже loguru используете? Или появилось что-то поинтереснее? О_о
Офигеть, так просто.
Оставьте logrotate его работу) Не нужно делать из приложения комбаин, тем более, что "ротирование" таким образом не решает вопрос с исчерпыванием дискового пространства, оно все равно закончится хоть и позже.
Хорошо, когда есть варианты:) Можно настроить, чтобы старые логи удалялись
Чудесная либа, спасибо! Кстати, а где лучше хранить джанговские логи? Внутри приложения в app/logs/? Вместе с остальными в системе в /var/log/app? С точки зрения стандартизации, в общей системной папке удобнее, но тогда приложение должно знать о внешнем мире. Подавать путь через переменные окружения? Но все равно какой дефолтный путь, если не подать?
Все, завтра внедряю в проект :) Кроме шуток!
Вот, отлично:)!
пасибо! буду пробовать. Когда будет инфа по курсу?
скоро будет анонс на канале
Только начал изучать логирование и пока не особо поникаю как его использовать, но принты тоже могут писать в файл.
Думаю, лучше паковать в gz, что бы легко потом просматривать содержимое через zless и парсить через zgrep.
а если у меня проект разделен на модули, то в каждом модуле надо делать импорт и заново писать logger.add("debug.log", format="{time} {level} {message}", level="ERROR", rotation="1 MB", compression="zip") ?
А можно ли с помощью данной библиотеки, например ,отправлять логи в телеграм?
Почитай документацию, наверняка можно написать свои хендлеры и отправлять сообщение в телеграм.
можно, конечно
А есть библиотека, чтобы логи сразу писать в базу данных?
Чтобы избежать проблем с местом на диске нужно хранить логи вне сервера:)
Большинство мелких проектов живут на 1 сервере - и nginx, и приложенька, и база. Бюджеты не позволяют)
Библиотека и правда классная, прям идеалогия пути python. Но что делать если ты используешь стороние библиотеки, ту же sqlalchemy которая ведет логгирование через logging😭