Лёгкое логирование в Python с Loguru. Замена встроенной библиотеке logging
Вставка
- Опубліковано 27 вер 2020
- Мой курс «Хардкорная веб-разработка» - course.to.digital
Книжный клуб Ботаним!, где мы читаем хорошие ИТ-книги: botanim.to.digital/
Telegram: t0digital.t.me
Сказать спасибо за это видео можно здесь - boosty.to/digitalize.team
Если использование встроенной в Python библиотеки logging кажется вам сложным и избыточным, то скорее всего библиотека loguru - то, что вам нужно. Поговорим о простом логировании в Python с loguru, установим и сконфигурируем библиотеку, а также покажем несколько быстрых лайфхаков с ней.
/****************** about ******************/
Меня зовут Алексей Голобурдин, я программирую с 2004 года и на этом канале делюсь своим опытом. Я основатель и руководитель компаний:
- Диджитализируй digitalize.team, разрабатываем сложные IT системы для бизнеса;
- Salesbeat salesbeat.pro, комплексный модуль доставки для интернет магазинов.
Если у вас есть проект на разработку, пишите нам на hi@digitalize.team.
С другими предложениями, а также если вам нужна одна или несколько индивидуальных консультаций/уроков по разработке (3000 руб/час), пишите мне на alexey@salesbeat.pro.
Telegram канал - t.me/t0digital
ВК - digitalize.team
RuTube - rutube.ru/channel/24802975/ab...
Дзен - dzen.ru/id/6235d32cb64df01e6e...
Наверное, выскажу общее мнение, что видос как всегда крайне понятный, а самое главное полезный, круто, огонь 👍🏻👍🏻
Спасибооо 🙏
@@t0digital спустя четыре месяца вспомнил о видосе, т.к. на первом крупном боевом проекте логирование превратилось в нечто жуткое.
Миксин, от которого наследуется куча классов с переопределением методов логирования дополнительной информации о состоянии инстанса.
Когда смотришь на uml диаграмму начинаешь понимать что где-то свернул не туда. Да и конфиг logging приближающийся к сотне строчек даже в отдельном файле смотрится не очень красиво.
Вероятнее всего теперь все логирование переведу на loguru. В сумме больше кода, но... явное лучше, чем не явное :)
Спасибо за видео!
@@t0digital Подскажите, пожалуйста, можно ли сделать так, чтобы error писал только в файл без вывода на экран? Благодарю
Отличный формат коротких выпусков о таких полезных и приятных плюшках пайтона. Спасибо, познавательно!
Такие видосы не стареют. Приходят новые возжаждавшие знаний, смотрят, пробуют, проникаются. И вот, уже очередной хлопает себя по лбу и идет этой новой дорогой. Классно. Большое спасибо. БОЛЬШОЕ СПАСИБО!
Как всегда полезно. Спасибо. Ждём новых роликов.
Заинтересовало, буду пробовать. Спасибо!
Ну это же просто пушка! Огромное спасибо за понятный и приятный видос)
Спасибо огромное.
Действительно куда удобнее, чем принтом в файл записывать
Большое спасибо. Классные разборы полезных библиотек, продолжайте, пожалуйста.
Спасибо! Будут ещё разборы
Оч нравятся видосы на канале в формате - "смотрите есть вот такая полезная штука, сейчас я вам покажу чем"
Очень здорово и понятно обьяснил! С примерами. Прям круто, спасибо :)
Здорово! Просто огонь библиотека! Канал Диджитализируй стал уже некоторым проводником в мире технологий
спасибо, хотелось бы больше разборов таких полезных библиотек
Первое впечатление о логировании благодаря вам хорошее, всё прекрасно понял благодарю
Низкий поклон, то что нужно прямо сейчас!
Рад, что полезно!
Спасибо за видео, как всегда супер!
Очень интересно! Спасибо большое!
Офигенно. Завтра же начну внедрять
Дуже корисне відео для мене! Дякую!
Спасибо. Очень полезно. Буду пользоваться. )
Очень познавательно! Спасибо!
Алексей, огромное Вам спасибо! Очень полезные видео.
Рад, что полезно! Спасибо
Отличное видео! Спасибо.
Огромное спасибо за полезную библиотеку! Очень бы хотелось увидеть видео с правилами логирования в python. Везде только описания библиотек, а вот как грамотно и с максимальной пользой вести логи - нет.
Первое правило - использовать logging, потому что все сторонние либы его юзают и он очень гибкий и позволяет прикрутить поверх все что надо. Второе правило - если у вас автономный сервис (бот, веб приложение) не пытаться самостоятельно писать в файл, а отправлять их в stderr, откуда заберут уже journald, fluentd и т.п.. Третье правило - не форматировать строки в логе самостоятельно, пусть в них вставляет данные logging (он это будет делать только если запись реально логируется)
Крутой разбор возможностей библиотеки! Лайк, подписка, все дела
Благодарность автору!!! это топчик
Жги дальше! ) Лайк!
Спасибо за видео!
Было бы здорово, если бы показали как его в Django проект встроить.
Очень полезно видео. Спасибо.
Алексей, ты святой человек. Я проходил целые курсы по логгированию. Думал, ну как же так, в таком лаконичном языке Python могли сделать простейшую функцию записи ошибок в файл так сложно. А оказывается бывает иначе, реально в стилей Пайтон. Просто, функционально, красиво. Спасибо, огромное, человеческое спасибо!
Спасибо! Отличная подача материала. Продолжайте пожалуйста. Очень познавательно и полезно. Привет из Казахстана. Удачи Вам!
Бэлин. Ролик за роликом полезная инфа. Огонёк. Спасибо)
А вот полезное! Годнота, вот даже подпишусь за такое и плюсану!
спасибо за наводку, настройка ротейшн ваще по красоте
Дааа, очень удобно
Красавчик, раскатал как надо
Супер! Спасибо) очень круто!!!!
Рад, что полезно!
Класс! Спасибо 👍
Я такими темпами научусь писать простенькие программы) Вон логирование уже выучил) Спасибо, очень интересно!)
Отличный результат:)!
Блин! Классная штука! Спасибо тебе. Как раз хотел с логгерами поработать)))
Больше подобных полезных штук!
Вот это огонь! Благодарю
Рад, что полезно!
Супер!
Красиво. Спасибо.
Спасибо огромное, вместе с новым деббагером в питоне жить всё круче и легче=)
Видосы по Python, ура!
Кстати, когда начало курса?😁
Скоро будет анонс на канале:)
@@t0digital Уже заваривать чаëк?)
круть, спасибо)
Алексей, спасибо за видео! Как всегда очень полезно! А Вы не подскажете, когда начнется Ваш курс?
Скоро начнется, информация будет на канале
@@t0digital Есть примерные сроки ?
@@t0digital Ждём не дождёмся. Как раз замаячили средства свободные на горизонте. =)
Я использую structlog. Помогает делать логи с контекстом, очень удобно
большое спасибо, про print уже забыл
Спасибо, братишка.
thanks very much
Спасибо!
После просмотра остается приятное ощущение, как от передачи с Николаем Николаевичем Дроздовым, «В мире... IT»)) Супер, спасибо за видео! Пойду прикручу логуру к проекту )
Спасибо!
Чудесная либа, спасибо! Кстати, а где лучше хранить джанговские логи? Внутри приложения в app/logs/? Вместе с остальными в системе в /var/log/app? С точки зрения стандартизации, в общей системной папке удобнее, но тогда приложение должно знать о внешнем мире. Подавать путь через переменные окружения? Но все равно какой дефолтный путь, если не подать?
Когда то участвовал в OLTP проекте (С++, linux). Логировка (несколько дивных С функций) сначала писалась в память , а потом на диск (для производительности). Когда сервис падал, все что было в памяти исчезало. На поиск ошибки уходило , в среднем, несколько дней. Меня попросили исправить баг -- в логах случайным образом появлялась буква "я". Вместо этого я написал новый многопоточный логировщик, который при падении сервиса записывал в файл все предсмертные логи и даже стек вызовов. На поиск и исправление ошибки мы начали тратить , в среднем, 5 минут. Спасибо за видео! Очень важная тема!
Хоспаде, а я искал тулзу что бы выводить логи в веб интерфейс, и вот он джсон формат, ура
пасибо! буду пробовать. Когда будет инфа по курсу?
скоро будет анонс на канале
Храни тебя бог!
Спасибо-спасибо!
От души! Отключаю logging)
очень круто
Здравствуйте, Алексей, советую Вам рассказать людям про poetry, по моему мнению это незаменимый инструмент в любом development flow любого проекта, в частности про важность контроля совместимости версий пакетов
красота!
дааа:)
За логгер отдельный лайк и подписка. =)
Мега полезно
Спасибо, пошел убирать принты)
Отличный план!
Длинный коооооооммеееннннттттт для продвижения ккккккаааааааааааанннннннннннннаааааааааллллллллллллааааааааааа и Лайк обязательно и подписка однозначно. Все четко и понятно. Без всяких ,, соплей,,
Спасибооо 💪💪💪
Огонь. С прошлого видоса начал Го учить (раньше думал о с++). Щас логи буду переписывать на Логуру)) вдохновляешь на дополнительную работу)) Давай ещё с тестированием может что-то? Pytest например. Ещё может подкинешь инфы о компиляции, как это работает, как завязать гошный бинарник с прогой на питоне...
Отлично:) Гошный бинарник завязать с прогой на питоне можно по-разному, через брокер сообщений, например (redis/rabbitMQ/another)
Диджитализируй! Изучу, спасибо
Мне кажется, не хватает таки применения этой либы в том же Django.
Спасибо за обзор крутых фич для пайтона, подскажите пожалуйста, как его можно с Django интегрировать?
после каждого твоего видоса появляется желание продолжать учить кодить!
а это может дать не каждый препод даже за деньги
Интересно было бы услышать как они с иерархией логов работают. Наверное это рут лог, а там добавлять можно. Вообще классно что всякая ротация встроена, но в основном это решается внешними инструментами если вы на докере и кубернетесе. Думаю это для самостоятельных приложений только типа десктоп или эмбед.
Офигеть, так просто.
Спасибо, так как начал изучать питончика, а до этого знал всего лишь старенький Паскаль и асм на z80, по этому принты принты.....
Удобная либа, жирный лайк
Красиво, конечно, но я уже привык к logging.
Слишком много крови было пролито для его освоения. Я так просто не сдамся, нет!
понимаю:)
Эффект Конкорда :)
Молодец
Спасибо!. Ребята как вы логи с pytest собираете ?:))
В таких видео надо обязательно рассказывать и учить кодеров, что не одними файлами логи едины, еще можно отправить в сислог или другой сборщик или агрегатор логов такой как logstash. Это даст понимание и привьет хорошие привычки
Ну так и видео не прото как хранить логи)
Видео про конкретную либу, методы хранения и инструменты за пределами оного.
А и да, об этом рассказывают конечно в общих темах
Видосы нравятся, только не хватает старого доброго "Здорово, котаны" - когда слышишь и понимаешь, что сейчас будет что-то полезное, ламповое и интересное)
вопрос, а логи всегда будут писаться в файл, если например в коде есть try: / except c принтом ошибок, то будут ли такие ошибки писаться логгером?
А есть возможность отслеживать ошибки в каком-либо классе в целом. Что-то типа декоратора catch. Пытаюсь залогировать все class based вьюшки, но не знаю как
Хорошая либа. Теперь осталось наш легаси проект перевести на 3 версию
успехов вам!
(какой нибудь комментарий)
Видос в тему, думаю придется добавлять логирование в проект один...
Не придется выдумывать велосипед)
Выглядит очень красиво. Спасибо! Если пишу логи в файл .log, можно его где-то увидеть таким же красивым, как в консоли Python?
разве в html сохранять
Круто !!!)
Сними видос по навигации в VIMе )
Команд очень много, вроде как, и не пойму какие запоминать
самое первое видео на канале:)
Диджитализируй! Отлично, спасибо большое ) не заметил видео, так как подписался только на видосе про копирование гигабайтных файлов )
В Logging удобно через basicconfig убирать уровни отображения. изменил один параметр после запуска и все, нет уровня debag в консоли, а здесь как?
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
Вроде работает, но есть у меня сомнения, что если в программе будет сразу несколько уровней логгирования, всё это взорвётся к чертям.
Зачёт, но и сентри тоже по питонячий очень =)
Спасибо за видео! Нет ответа на вопрос можно ли сделать несколько логгеров в одном проекте.
можно:)
Крутое видео! А в 2023 году тоже loguru используете? Или появилось что-то поинтереснее? О_о
Только начал изучать логирование и пока не особо поникаю как его использовать, но принты тоже могут писать в файл.
что именно сложно настроить в logging ?
Все, завтра внедряю в проект :) Кроме шуток!
Вот, отлично:)!
Сначала подумал... А кокой смысл то юзать какую-то другую либу, исли родной логгер и так прост. Но теперь все... спасибо. Моя жизнь никогда не станет прежней... Спасибо за ролик !
loguru кайфовый, дааа
Библиотека хорошая, однако, плюс logging в том, что это калька с log4j из Java. В .NET такая же калька называется Log4Net, в PHP - это monolog. Привыкаешь уже к подходу-то.
Библиотека и правда классная, прям идеалогия пути python. Но что делать если ты используешь стороние библиотеки, ту же sqlalchemy которая ведет логгирование через logging😭
Кайф
Ребят, не подскажете пример грамотно структурированного проекта на просторах гитхаб?
А Алексей, как всегда топ)
Включу экстрасенса и предположу, что необходим проект связанный с Django: github.com/mozilla/bedrock
@@amidobox Пока у меня десктопное приложение, но в любом случае спасибо
Видать format = не работает в новом питоне получается ? блин ну во первых не заполнен message и у тебя работает , так же и тайм, а level вообще вроде как зарезервирован.... блин раньше работало я помню пользовался жи )
Алексей, будет ли у видео о десятипальцевом вводе, как учиться этому?
Я, право, не знаю, как это учиться - я как-то сам незаметно для себя заметил, что набираю вслепую. Думаю, просто нужна практика
Клавиатурные тренажёры работают. Я, правда, за время обучения одну клавиатуру сломал (со злости), но научился. Главная механика в посадке рук и движениях, когда определенным пальцам соответствует определенный ряд клавиш. Со временем это доводится до автоматизма и кажется естественным
habr.com/ru/post/175243/
Тут описана методика по которой я научился этому методу и через полгода уже полностью им овладел. Всем настоятельно рекомендую, очень облегчает жизнь в консоли и Vim.
@@LewaSGN метода интересная, и вполне рабочая, только смущают вольности автора в системе пальцев
Привет. Решил писать не под роликом с книжками))
Есть идея для видео. Django ORM. Вот меня лично интересует, если
стоит вопрос качественной оптимизации запросов, то все говорят что
Джанго ОРМ это плохо и нужно юзать Алхимию. Вот я склоняюсь ближе к
чистому SQL в таком случае. Что ты скажешь?
Привет! Для сложных запросов я точно выберу голый SQL, а не Django ORM. С алхимией пока много не работал, знаю, что на ней можно выразить сильно больше, чем на Django ORM, но насколько это читаемо и близко к родному SQL не могу сказать. Скорее всего тоже для сложных длинных запросов, которые ты и так сидишь долго оптимизируешь на скорость выполнения (когда это важно) я выберу сырой SQL. Хотя у него есть свои минусы, при переименовании таблиц/колонок надо все сырые SQL рефачить. Впрочем это можно облегчить, если брать эти имена полей/таблиц из ORM сущностей.
@@t0digital поддержу