Логирование: оставь print позади

  Рет қаралды 25,978

Python Russian

Python Russian

Күн бұрын

Логирование - это фиксация состояния вашего приложения в определенный момент времени.
Оно позволяет понимать, что система работает как ожидается (и вообще работает), а также облегчает диагностику проблем
Минусы print:
нет общего формата (дата)
не ясно какой модуль в каком месте написал информацию, насколько она важна
нужно выключать/включать, обязательно забудем удалить
нельзя гибко настроить куда писать (файл/консоль)
Когда уместен print: в очень простых, маленьких приложениях и скриптах.
Чем больше и сложнее приложение тем важнее использовать специальные инструменты логирования
DIWEC = DEBUG - INFO - WARNING - ERROR - CRITICAL
DEBUG - самая подробная информация, нужна только разработчику и только для отладки, например значения переменных, какие данные получены и т.д.
INFO - информационные сообщения, как подтверждение работы, например запуск сервиса
WARNING - еще не ошибка, но уже надо посмотреть - мало места на диске, мало памяти, много созданных объектов и т.д
ERROR - приложение еще работает и может работать, но что-то пошло не так
CRITICAL - приложение не может работать дальше
logger = getLogger(__name__) - принятый подход для логирования с именем модуля
логеры с именами наследуют настройки от root, но могут быть настроены иначе
logger.debug("Get expression %s", exp) - для обратной совместимости используется старый формат через %
Читать:
docs.python.or...
docs.python.or...
docs.python.or...
Присоединяйтесь к помощи каналу, будет интересно)
✔️Бусти boosty.to/pyth...
✔️Юмани 410011506612886
Будь первым везде и всегда, включай уведомления о новых выпусках 🔔
Смотри там где удобно🤩
✔️ python_...
✔️ rutube.ru/chan...
✔️ dzen.ru/python...
✔️ / pythonrussian
✔️ t.me/python_ru...
#Python #PythonRussian #PyCharm

Пікірлер: 109
@PythonRussian
@PythonRussian 7 ай бұрын
друзья, не забываем подписываться на канал, спасибо! Друзья, я оговорился по поводу ф-строк, мы конечно можем их использовать в логгинге, но это не принято и любой линтер вам будет жаловаться на такое использование. Дело в том что ф-строки будут вычисляться всегда, даже для тех событий, которые нам по уровню не нужны (например мы ловим только ЕРРОР, но ф-строка будет скомпонована и для ДЕБАГ/ИНФО). Именно поэтому все используют старый формат %s при логировании
@zloy_tarakaniscshe161
@zloy_tarakaniscshe161 7 ай бұрын
Вижу у вас в PyCharm есть штучка интересная по имени GIGA CODE, на сколько полезный плагин и стоит ли его ставить?)
@exponental
@exponental 2 ай бұрын
Это великолепно. Спасибо огромное, ооочень доступное объяснение!
@aquabogira
@aquabogira 6 ай бұрын
Python Russian, Продолжайте в том же духе, ВЫ МОЛОДЕЦ! Огромное спасибо за такой детальный подход к объяснению этой темы. Особо хочу отметить структуру подачи материала - каждый шаг был логичен и последователен, что позволило легко усваивать информацию.
@BuzinovYura
@BuzinovYura 6 ай бұрын
Спасибо за всю проделанную работу на твоем канале, ты делаешь бесценный материал. И хотел попросить раскрыть тему с енамами в python, когда применяется, какие проблемы решает, когда нужно его задействовать. Будет очень здорово. Ещё раз спасибо 🙂🙂
@PythonRussian
@PythonRussian 6 ай бұрын
а ведь точно, про енамы то я и забыл, даже в планах не было рассказать, спасибо за подсказку!!!
@zetbustre
@zetbustre 4 ай бұрын
теперь есть
@erybnikov
@erybnikov 4 ай бұрын
Логирование занимательная вещь. Не знал что такое есть. Очень доступно изложено. Спасибо. У себя использовал следующую комбинацию: def txtSave(txt): with open('data.log', 'a') as file: file.write(txt + " ") txt = f"{время} сообщение" txtSave(txt)
@slavanew1294
@slavanew1294 5 ай бұрын
Лучший видос на русском ютубе по теме логирования на python. Автору безмерное уважение, за то что начал объяснять с таких азов, это очень помогло осознать и понять вообще что такое логирование
@PythonRussian
@PythonRussian 5 ай бұрын
спасибо за добрые слова!
@antiloop5297
@antiloop5297 2 ай бұрын
чувак, твой канал - лучший, от души спасибо!
@PythonRussian
@PythonRussian 2 ай бұрын
спасибо, друг!
@grandlagging0zero175
@grandlagging0zero175 7 ай бұрын
Ахпхпхаххах😂 когда мое логгирование - это вначале print, а потом, когда в продакшн, просто авто-замена принта на log.print("какой-то вывод") P.S. Если вы думаете, что я шучу, то я не шучу :) даже библиотеку свою написал для этого...
@christiansanta984
@christiansanta984 6 ай бұрын
Сложная? Дай ссылку))
@minimalstory
@minimalstory 6 ай бұрын
Ты не поверишь, какой это частый кейс))
@god00alkash
@god00alkash 4 ай бұрын
Тоже самое) Только расширил библиотеку с возможностью писать в файл, с отметкой времени и ещё по мелочи)
@blackark11
@blackark11 7 ай бұрын
Прекрасная работа!
@dlaudanum
@dlaudanum 26 күн бұрын
Спасибо за видос ! Как всегда топ 🎉 а посему ты старую версию pycharm используешь ?
@PythonRussian
@PythonRussian 26 күн бұрын
в силу привычки и в силу того, что новую версию пайчарм про мне уже не получить -санкции.
@曾玮-d8z
@曾玮-d8z 6 ай бұрын
Большой молодец! Спасибо за объяснение доступным языком.
@kirichenkodv
@kirichenkodv 6 ай бұрын
Крутяк! Лучшее видео про логирование
@АлександрПопов-п2щ
@АлександрПопов-п2щ 6 ай бұрын
Сделайте видео про библиотеки abc и future, пожалуйста. И расскажите про абстрактные классы
@PythonRussian
@PythonRussian 6 ай бұрын
в список себе добавил, но это не быстро будет
@peskarr
@peskarr Ай бұрын
Встроенный логгер Python позволяет использовать f-строки, но есть нюансы. Логгер Python предоставляет возможность форматирования сообщений через старый стиль с процентами (например, %s), который встроен в библиотеку. Однако вы можете использовать f-строки или метод .format() напрямую при создании строки лога, но это будет выполнено сразу при вызове функции логгера, в то время как использование %s позволяет логгеру откладывать форматирование строки до тех пор, пока это не понадобится (например, если уровень лога ниже порога, сообщение не будет формироваться).
@PythonRussian
@PythonRussian Ай бұрын
спасибо, именно так и написано в закрепленном комменте xD
@melordfilms
@melordfilms 17 күн бұрын
На урал пришла зима, мне дали таску по логированию:)
@fixcay7129
@fixcay7129 6 ай бұрын
Хорошая подача материала, все понятно!
@Chanel_for_CODE
@Chanel_for_CODE 7 ай бұрын
Огромное спасибо, за пояснения!
@Juvelir97
@Juvelir97 4 ай бұрын
Топовый контент, спасибо!
@alogic75
@alogic75 Ай бұрын
00:00 Почему не хватает print() 14:26 включаем logging
@samorodok9327
@samorodok9327 6 ай бұрын
Приятная связанная речь, подписался)
@PsyXOR
@PsyXOR 6 ай бұрын
Чтоб совсем тему раскрыть, было бы хорошо дополнить про ротацию логов которые пишутся в файл. Дабы в прекрасный момент не увидеть, что всё свободное дисковое пространство пожрано, но да, в документации это всё есть, RotatingFileHandler нас выручит. А так в целом толково, спасибо за видео.
@PythonRussian
@PythonRussian 6 ай бұрын
чтобы совсем тему раскрыть много видео надо, но кстати если снимать продолжение то вот там уже углубляться в разные фишки
@learningmeansdoing
@learningmeansdoing 6 ай бұрын
Полезная информация, спасибо!
@Kostya_kzn
@Kostya_kzn 7 ай бұрын
Всегда хотел попробовать, но никак руки не доходили!) Welemir1, спасибо!
@PythonRussian
@PythonRussian 7 ай бұрын
твое время пришло!
@expoliemexpoliem6246
@expoliemexpoliem6246 7 ай бұрын
огромное спасибо! Как всегда крайне интересно и полезно!
@dianaivanova8803
@dianaivanova8803 6 ай бұрын
Можно ли использовать логирование, чтобы отслеживать статистку для дальнейшего анализа? Например количество вызова какой-то команды пользователем в боте, какое-то может количество запросов, количество новых пользователей (т.е например загрузить потом логи в pandas)? Видео, как всегда 🔥🔥
@PythonRussian
@PythonRussian 6 ай бұрын
да, конечно. По сути логирование это просто фиксация каких то моментов в системе, а кто и как будет информацию полученную использовать - это уже не выбор пользователя. Можно для отладки, можно просто для инфы, для статистики, для сбора и анализа данных и т.д.
@IvasyukRuslan
@IvasyukRuslan 22 күн бұрын
Excellent explanation !
@pro100_igor
@pro100_igor 7 ай бұрын
Видео очень полезно, спасибо за объяснения. 👍 И сразу вопрос: а зачем в basicConfig нужел level, если у каждого логгера свой уровень?
@PythonRussian
@PythonRussian 7 ай бұрын
основной уровень это ты как бы говоришь, что вообще в целом собирать, (например ДЕБАГ) и отправлять обработчикам. А на уровне хендлеров (обработчиков) ты уже говоришь: если событие тебе пришло и оно уровнем от твоего и выше -фиксируй. То есть, если ты на бейсике установишь ЕРРОР, то он ничего не соберет кроме ошибок и не передаст свои обработчикам, им нечего будет фиксировать, кроме ошибок. Вот возьми прямо поэкспериментируй с уровнями логирования на бейские и хендлерах.
@pro100_igor
@pro100_igor 6 ай бұрын
@@PythonRussian Я уже после отправки сообщения додумал до этого. Спасибо за ответ.
@onlinebot5853
@onlinebot5853 7 ай бұрын
Опа, новый контентик
@stevem4806
@stevem4806 3 ай бұрын
Спасибо!
@alexeysolovjoff5241
@alexeysolovjoff5241 6 ай бұрын
Если будет желание, напишите, пожалуйста, в каких случаях надо переходить к созданию пакетов, а не модулей. Т.е. у меня есть какой-то проект, в нём куча модулей, в каждом модуле куча классов, процедур и т.д. Вопрос, зачем их группировать в пакеты, если они уже вполне логично и функционально сгруппированы в модули?
@PythonRussian
@PythonRussian 6 ай бұрын
группировка в пакеты по той же причине, по какой ты группируешь и в модули - относятся к какой то теме. Ты сгруппировал предложения в главу, главы в часть, части в книгу) Это конечно не всегда нужно, но в сложно проекте обычно каждые 3-5-7 модулей относятся к чему то конкретному, например работа с клиентом, выносим в /client . Просто чтобы не было в одной папке десятков модулей. Надо подумать в какой теме про это рассказать.
@alexeysolovjoff5241
@alexeysolovjoff5241 6 ай бұрын
@@PythonRussian Во-первых, спасибо за ответ. Во-вторых, да, понятно, что пакеты - это следующий уровень организации кода. Возможно есть какие-то хорошие практики, которые как-то регламентируют это дело или дают признаки того, что надо уже создавать пакеты, иначе получишь в одной папочке море модулей , в котором очень быстро утонешь.
@alqueswan7164
@alqueswan7164 3 ай бұрын
А что будет если использовать f-строки?
@ГубкаБоб-р8ъ
@ГубкаБоб-р8ъ 7 ай бұрын
Отличный материал. Не понял вот что, основной экземпляр логгера должне создаваться именно в файле где точка входа в программу или не обязательно? logging.conf создается при первом срабатывании логгера, и потом настройки в main файле можно удалить и использовать загрузив их из logging.conf?
@PythonRussian
@PythonRussian 7 ай бұрын
Вообще не обязательно, но нередко именно так делают, рутовый и все наследники. Второй вопрос если честно не понял. На самой ранней стадии программы, при старте надо загрузить настройки логирования и применить их, после этого файл .конф тебе не нужен.
@anbur9197
@anbur9197 7 ай бұрын
нет, конфиг для логгера он написал отдельно еще до записи видео и потом просто применил его в программе
@IvanQRT
@IvanQRT 6 ай бұрын
А в чём проблема в logging использовать f-строки? Они прекрасно работают, да и как logging их отличить от обычных строк сможет?
@PythonRussian
@PythonRussian 6 ай бұрын
вы правы, я неверно выразился, просто принято использовать старый формат или extra, и любой линтер будет ругаться на использование ф-строк в логгинге. Причина в том, что ф-строка вычисляется всегда, даже когда данное лог-выражение ниже по уровню (скажем Дебаг, а мы ловим только Еррор), то есть она нам не нужна, но мы ее все равно вычислим и память займем. Возможно, если буду снимать продолжение -отдельно проговорю, спасибо
@яиграювбравлстарс-з7и
@яиграювбравлстарс-з7и 6 ай бұрын
по названию видоса, я подумал, что в очередной раз подразумевается "кончай юзать принт, переходи на нашу супер СаВрЕмЕнНуЮ новую либу, она вабще крутая, а ещё она модная и ей все гиганты пользуются, да еще и она новый стандарт индустрии" (которая на самом деле напичкана мусором и вообще работает хорошо только на чем-то мощном)
@PythonRussian
@PythonRussian 6 ай бұрын
нет, я только о стандартной библиотеке рассказываю, коммерческие решения каждый пусть ищет сам вместе с указанными вами проблемами.
@Окмен-ц1ю
@Окмен-ц1ю 7 ай бұрын
Все хорошо, а возможно делать в какой строчке произошел этот критикал или еррор? А то если прога на много строк, и тебе выдали эти критикал, и ты не знаешь от куда ноги ростут
@PythonRussian
@PythonRussian 7 ай бұрын
да, я то пример максимально простой показал, но на самом деле можно ошибку представлять всем стеком вызовов, где будет вся инфа, вплоть до строки, где упало.
@Окмен-ц1ю
@Окмен-ц1ю 7 ай бұрын
@@PythonRussian круто! Надо будет тогда в тему входить, логирование в файл вообще огонь, сейчас мучаюсь этими принтами, спасибо за тему
@KENTSZ
@KENTSZ 4 ай бұрын
Привет! Увидел что используется giga ide, можешь прокомментировать его работу? Сильно ли отличается от PyCharm CE и от PyCharm Professional? На сколько знаю, то за основу взята именно CE версия
@PythonRussian
@PythonRussian 4 ай бұрын
а это не гига ИДЕ, это пичарм про + плагин гигачат (про него есть отдельное видео). Но я гигаиде пробовал, скажем так - не увидел причину выбирать ее вместо пичарм комьюнити, там очень много сразу всего на борту и нужно отключать всякую джаву и груви, оставлять только питон, чтобы не мешалось
@KENTSZ
@KENTSZ 4 ай бұрын
@@PythonRussian спасибо за развёрнутый ответ!
@dodibilder
@dodibilder 4 ай бұрын
Во время разработки накидывать логирование бесмысленно, только со стадии фикса ошибок, тот же сервис на фласке должен иметь свою папочку с логами как по мне (без ротации использовать логи - вредительство) 😅
@tokosotomimo14
@tokosotomimo14 4 ай бұрын
сделал очень удобный формат для себя время, имя логгера, урвоень, сообщение, название файла.py, название функции, номер строки format='%(asctime)s - %(name)s - %(levelname)s | %(message)s | %(filename)s - def: %(funcName)s - line: %(lineno)d',
@antiloop5297
@antiloop5297 2 ай бұрын
не понял, а файл logging.conf откуда взялся?
@PythonRussian
@PythonRussian 2 ай бұрын
я сам его создал перед видео, там все настройки, которые нам нужны, его формат и другие варианты вынесения всех настроек в файл есть в документации. Я не сгенерировал его какой то кнопкой, если ты об этом, он был создан заранее
@Oleg50600
@Oleg50600 6 ай бұрын
Я думал будет что то еще более изящное. Но нет. Всё равно надо засорять код строчками print или logger
@PythonRussian
@PythonRussian 6 ай бұрын
это кстати интересная идея -логгер без изменения логики кода
@Oleg50600
@Oleg50600 6 ай бұрын
@@PythonRussian да. Как прекрасен был бы код без строк для отладки
@ИльяБайков-р1и
@ИльяБайков-р1и 7 ай бұрын
Большое спасибо. А где найти конфигурационный файл ?
@PythonRussian
@PythonRussian 7 ай бұрын
по обеим ссылкам что в подписи -есть примеры конфигов
@anbur9197
@anbur9197 7 ай бұрын
Очень классная штука. А в каком-нибудь Django, у которого модули плодятся как тараканы, такое тоже можно применять?
@PythonRussian
@PythonRussian 7 ай бұрын
уверен у Джанго уже есть какая нибудь библиотека\плагин для этого, надо просто поискать
@xumpocmb-404
@xumpocmb-404 6 ай бұрын
у джанго есть логгер. но можно завести свой. гуглите :)
@pvarankin
@pvarankin 6 ай бұрын
а вы точно работаете программистами ? прямо за деньги ? )) я вот тут писал более-менее большой проект, где делил функции по файлам. и в каждой функции есть необязательный параметр debug. дальше if debug: print) если функция вызывается из __main__, то там дебаг стоит в true, если из основного файла, то false. получается у меня отладка идет с принтами, а в проде никаких лишних сообщений)
@PythonRussian
@PythonRussian 6 ай бұрын
точно. А вот вы видимо невнимательно смотрели, ваше решение неудобное. Что если часть инфы нам стала нужна, а не вся (пример с INFO)? Как поменять формат даты и есть ли он там? Как начать писать в файл? Одному то с таким работать куда ни шло, а в любой компании, где есть и другие программисты надо о поддержке думать. Я не говорю про лишний аргумент в каждой(!) функции.
@pvarankin
@pvarankin 6 ай бұрын
@@PythonRussian не, что откатывать удобнее не спорю. про уровни - ну сделать еще одну переменную)) я просто дебажу и тестирую каждую функцию отдельно, а потом выключаю логи почти совсем) в результате видно ок или не ок.
@PlayTheGames2
@PlayTheGames2 6 ай бұрын
​@@PythonRussianя вообще собственный класс логгера делал, тоже самое что и этот модуль, только убрал ненужный мне функционал
@PlayTheGames2
@PlayTheGames2 6 ай бұрын
я вот только задаюсь вопросом, как в logging цвета текста настраивать
@PythonRussian
@PythonRussian 6 ай бұрын
@@PlayTheGames2 это может быть простым решением, когда работаешь один. С другой стороны а зачем делать то, что уже есть? Ну и такое решение вряд ли оценит команда программистов - логгинг они знают или должны знать, а вот ваш класс нет.
@Nonstop4ik
@Nonstop4ik 7 ай бұрын
Спаибо и лайк.
@МаксЧирков-г4г
@МаксЧирков-г4г 7 ай бұрын
На Урале лето, ты сам откуда?
@PythonRussian
@PythonRussian 6 ай бұрын
Пермь
@junior_analyst
@junior_analyst 6 ай бұрын
А как логировать асинхронный код?
@PythonRussian
@PythonRussian 6 ай бұрын
точно также, docs.python.org/3/library/asyncio-dev.html#logging
@barma1309
@barma1309 7 ай бұрын
Спасибо
@peaceful_worrior
@peaceful_worrior 6 ай бұрын
Тебе бы обучающий курс открыть, бро. А то в моём курсе только принт учат
@PythonRussian
@PythonRussian 6 ай бұрын
это ближе к пенсии, как много времени появится
@Vlad_4572
@Vlad_4572 6 ай бұрын
Пришло лето, говоришь? Ну, некоторые признаки пришли, кроме тепла))
@PythonRussian
@PythonRussian 6 ай бұрын
и не говори, не успели порадоваться, ночью опять 0
@ДмитрийСафронов-р2ъ
@ДмитрийСафронов-р2ъ 7 ай бұрын
Братан.... Попробуй свои видео смотреть на телефоне!!! Ну ты же не вчерашний блогер??? Ну нереально... Полезная информация занимает 5-10 процентов от всего экрана... Шрифт увеличь плиз....
@PythonRussian
@PythonRussian 7 ай бұрын
это уже 20 шрифт, больше не могу, привет мир будет весь экран занимать
@ИринаЩепетова-и3ч
@ИринаЩепетова-и3ч 6 ай бұрын
Я смотрю с телефона в основном, все прекрасно
@ivanartemenko7896
@ivanartemenko7896 6 ай бұрын
Поправочка, logger переваривает Ф-строки
@PythonRussian
@PythonRussian 6 ай бұрын
да, оговорка, в закрепленном комменте поправился
@memantulov
@memantulov 6 ай бұрын
Почему мы не можем использовать f-string в логинге?
@PythonRussian
@PythonRussian 6 ай бұрын
да, это я оговорился, можем конечно, но не рекомендуется, сейчас напишу об этом в закрепленном комменте
@memantulov
@memantulov 6 ай бұрын
@@PythonRussian теперь понятно. Спасибо за разъяснение. Теперь надо всё переделывать...
@senser1o76
@senser1o76 6 ай бұрын
Секрет полишенеля
@mutiev
@mutiev 6 ай бұрын
Господя, 12 минут просмотрел - задолбался
@mifonix88
@mifonix88 6 ай бұрын
Принта хватает, ботлее чем. Всё прочие решается одним классом коим можно настроить любое поведение принта. Велосипед в виде сторолнней библиотеки бессмысленен. Учите грамоту - там всё есть!
@Борьбазадепозит
@Борьбазадепозит 7 ай бұрын
Спасибо брат ... Дебилом себя чувствую с пхп привычка шлейфом осталась принтовать все....
@PythonRussian
@PythonRussian 7 ай бұрын
до какого то момента это может быть выходом, но чем сложнее приложение тем тяжелее с принтами
@yMPu_CK0T
@yMPu_CK0T 6 ай бұрын
Python Is Not russian, Try To Understand!
@victoramartov1916
@victoramartov1916 6 ай бұрын
Спасибо за ваш труд.
Основы Asyncio
53:25
Python Russian
Рет қаралды 25 М.
Конкурентность и параллельность
40:31
Python Russian
Рет қаралды 8 М.
It’s all not real
00:15
V.A. show / Магика
Рет қаралды 20 МЛН
黑天使只对C罗有感觉#short #angel #clown
00:39
Super Beauty team
Рет қаралды 36 МЛН
Мен атып көрмегенмін ! | Qalam | 5 серия
25:41
Quando eu quero Sushi (sem desperdiçar) 🍣
00:26
Los Wagners
Рет қаралды 15 МЛН
Gigacode и PyCharm: используем ИИ в работе
35:59
Замыкания (Closures) в Python
30:54
Python Russian
Рет қаралды 16 М.
Modern Python logging
21:32
mCoding
Рет қаралды 209 М.
КАК УСТРОЕН TCP/IP?
31:32
Alek OS
Рет қаралды 241 М.
Логирование в Python и Django
19:58
Диджитализируй!
Рет қаралды 43 М.
Минимум математики для Айтишников
16:12
It’s all not real
00:15
V.A. show / Магика
Рет қаралды 20 МЛН