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

แชร์
ฝัง
  • เผยแพร่เมื่อ 26 ก.ย. 2024
  • Логирование - это фиксация состояния вашего приложения в определенный момент времени.
    Оно позволяет понимать, что система работает как ожидается (и вообще работает), а также облегчает диагностику проблем
    Минусы 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_...
    ✔️ boosty.to/pyth...
    ✔️ / pythonrussian
    ✔️ t.me/python_ru...
    ✔️ dzen.ru/python...
    ✔️ rutube.ru/chan...
    #Python #PythonRussian #PyCharm

ความคิดเห็น • 98

  • @PythonRussian
    @PythonRussian  4 หลายเดือนก่อน +11

    друзья, не забываем подписываться на канал, спасибо! Друзья, я оговорился по поводу ф-строк, мы конечно можем их использовать в логгинге, но это не принято и любой линтер вам будет жаловаться на такое использование. Дело в том что ф-строки будут вычисляться всегда, даже для тех событий, которые нам по уровню не нужны (например мы ловим только ЕРРОР, но ф-строка будет скомпонована и для ДЕБАГ/ИНФО). Именно поэтому все используют старый формат %s при логировании

    • @zloy_tarakaniscshe161
      @zloy_tarakaniscshe161 4 หลายเดือนก่อน

      Вижу у вас в PyCharm есть штучка интересная по имени GIGA CODE, на сколько полезный плагин и стоит ли его ставить?)

  • @grandlagging0zero175
    @grandlagging0zero175 4 หลายเดือนก่อน +33

    Ахпхпхаххах😂 когда мое логгирование - это вначале print, а потом, когда в продакшн, просто авто-замена принта на log.print("какой-то вывод")
    P.S. Если вы думаете, что я шучу, то я не шучу :) даже библиотеку свою написал для этого...

    • @christiansanta984
      @christiansanta984 4 หลายเดือนก่อน

      Сложная? Дай ссылку))

    • @minimalstory
      @minimalstory 4 หลายเดือนก่อน

      Ты не поверишь, какой это частый кейс))

    • @god00alkash
      @god00alkash 2 หลายเดือนก่อน

      Тоже самое) Только расширил библиотеку с возможностью писать в файл, с отметкой времени и ещё по мелочи)

  • @aquabogira
    @aquabogira 4 หลายเดือนก่อน +3

    Python Russian,
    Продолжайте в том же духе, ВЫ МОЛОДЕЦ!
    Огромное спасибо за такой детальный подход к объяснению этой темы.
    Особо хочу отметить структуру подачи материала - каждый шаг был логичен и последователен,
    что позволило легко усваивать информацию.

  • @BuzinovYura
    @BuzinovYura 3 หลายเดือนก่อน +3

    Спасибо за всю проделанную работу на твоем канале, ты делаешь бесценный материал. И хотел попросить раскрыть тему с енамами в python, когда применяется, какие проблемы решает, когда нужно его задействовать. Будет очень здорово. Ещё раз спасибо 🙂🙂

    • @PythonRussian
      @PythonRussian  3 หลายเดือนก่อน +2

      а ведь точно, про енамы то я и забыл, даже в планах не было рассказать, спасибо за подсказку!!!

    • @zetbustre
      @zetbustre หลายเดือนก่อน

      теперь есть

  • @blackark11
    @blackark11 4 หลายเดือนก่อน +8

    Прекрасная работа!

  • @erybnikov
    @erybnikov หลายเดือนก่อน

    Логирование занимательная вещь. Не знал что такое есть. Очень доступно изложено. Спасибо.
    У себя использовал следующую комбинацию:
    def txtSave(txt):
    with open('data.log', 'a') as file:
    file.write(txt + "
    ")
    txt = f"{время} сообщение"
    txtSave(txt)

  • @slavanew1294
    @slavanew1294 3 หลายเดือนก่อน

    Лучший видос на русском ютубе по теме логирования на python. Автору безмерное уважение, за то что начал объяснять с таких азов, это очень помогло осознать и понять вообще что такое логирование

    • @PythonRussian
      @PythonRussian  3 หลายเดือนก่อน

      спасибо за добрые слова!

  • @曾玮-d8z
    @曾玮-d8z 3 หลายเดือนก่อน

    Большой молодец! Спасибо за объяснение доступным языком.

  • @Juvelir97
    @Juvelir97 หลายเดือนก่อน

    Топовый контент, спасибо!

  • @Kostya_kzn
    @Kostya_kzn 4 หลายเดือนก่อน +6

    Всегда хотел попробовать, но никак руки не доходили!) Welemir1, спасибо!

    • @PythonRussian
      @PythonRussian  4 หลายเดือนก่อน

      твое время пришло!

  • @fixcay7129
    @fixcay7129 4 หลายเดือนก่อน

    Хорошая подача материала, все понятно!

  • @Chanel_for_CODE
    @Chanel_for_CODE 4 หลายเดือนก่อน +1

    Огромное спасибо, за пояснения!

  • @learningmeansdoing
    @learningmeansdoing 4 หลายเดือนก่อน

    Полезная информация, спасибо!

  • @expoliemexpoliem6246
    @expoliemexpoliem6246 4 หลายเดือนก่อน

    огромное спасибо! Как всегда крайне интересно и полезно!

  • @samorodok9327
    @samorodok9327 4 หลายเดือนก่อน

    Приятная связанная речь, подписался)

  • @PsyXOR
    @PsyXOR 4 หลายเดือนก่อน +1

    Чтоб совсем тему раскрыть, было бы хорошо дополнить про ротацию логов которые пишутся в файл. Дабы в прекрасный момент не увидеть, что всё свободное дисковое пространство пожрано, но да, в документации это всё есть, RotatingFileHandler нас выручит. А так в целом толково, спасибо за видео.

    • @PythonRussian
      @PythonRussian  4 หลายเดือนก่อน

      чтобы совсем тему раскрыть много видео надо, но кстати если снимать продолжение то вот там уже углубляться в разные фишки

  • @stevem4806
    @stevem4806 10 วันที่ผ่านมา

    Спасибо!

  • @dianaivanova8803
    @dianaivanova8803 3 หลายเดือนก่อน +1

    Можно ли использовать логирование, чтобы отслеживать статистку для дальнейшего анализа? Например количество вызова какой-то команды пользователем в боте, какое-то может количество запросов, количество новых пользователей (т.е например загрузить потом логи в pandas)?
    Видео, как всегда 🔥🔥

    • @PythonRussian
      @PythonRussian  3 หลายเดือนก่อน

      да, конечно. По сути логирование это просто фиксация каких то моментов в системе, а кто и как будет информацию полученную использовать - это уже не выбор пользователя. Можно для отладки, можно просто для инфы, для статистики, для сбора и анализа данных и т.д.

  • @pro100_igor
    @pro100_igor 4 หลายเดือนก่อน +2

    Видео очень полезно, спасибо за объяснения. 👍
    И сразу вопрос: а зачем в basicConfig нужел level, если у каждого логгера свой уровень?

    • @PythonRussian
      @PythonRussian  4 หลายเดือนก่อน +1

      основной уровень это ты как бы говоришь, что вообще в целом собирать, (например ДЕБАГ) и отправлять обработчикам. А на уровне хендлеров (обработчиков) ты уже говоришь: если событие тебе пришло и оно уровнем от твоего и выше -фиксируй. То есть, если ты на бейсике установишь ЕРРОР, то он ничего не соберет кроме ошибок и не передаст свои обработчикам, им нечего будет фиксировать, кроме ошибок. Вот возьми прямо поэкспериментируй с уровнями логирования на бейские и хендлерах.

    • @pro100_igor
      @pro100_igor 4 หลายเดือนก่อน

      @@PythonRussian Я уже после отправки сообщения додумал до этого. Спасибо за ответ.

  • @onlinebot5853
    @onlinebot5853 4 หลายเดือนก่อน +1

    Опа, новый контентик

  • @tokosotomimo14
    @tokosotomimo14 2 หลายเดือนก่อน

    сделал очень удобный формат для себя
    время, имя логгера, урвоень, сообщение, название файла.py, название функции, номер строки
    format='%(asctime)s - %(name)s - %(levelname)s | %(message)s | %(filename)s - def: %(funcName)s - line: %(lineno)d',

  • @exponental
    @exponental 22 ชั่วโมงที่ผ่านมา

    Это великолепно. Спасибо огромное, ооочень доступное объяснение!

  • @dodibilder
    @dodibilder หลายเดือนก่อน

    Во время разработки накидывать логирование бесмысленно, только со стадии фикса ошибок, тот же сервис на фласке должен иметь свою папочку с логами как по мне (без ротации использовать логи - вредительство) 😅

  • @Nonstop4ik
    @Nonstop4ik 4 หลายเดือนก่อน +2

    Спаибо и лайк.

  • @barma1309
    @barma1309 4 หลายเดือนก่อน

    Спасибо

  • @IvanQRT
    @IvanQRT 4 หลายเดือนก่อน +1

    А в чём проблема в logging использовать f-строки? Они прекрасно работают, да и как logging их отличить от обычных строк сможет?

    • @PythonRussian
      @PythonRussian  4 หลายเดือนก่อน +1

      вы правы, я неверно выразился, просто принято использовать старый формат или extra, и любой линтер будет ругаться на использование ф-строк в логгинге. Причина в том, что ф-строка вычисляется всегда, даже когда данное лог-выражение ниже по уровню (скажем Дебаг, а мы ловим только Еррор), то есть она нам не нужна, но мы ее все равно вычислим и память займем. Возможно, если буду снимать продолжение -отдельно проговорю, спасибо

  • @alqueswan7164
    @alqueswan7164 10 วันที่ผ่านมา

    А что будет если использовать f-строки?

  • @АлександрПопов-п2щ
    @АлександрПопов-п2щ 3 หลายเดือนก่อน

    Сделайте видео про библиотеки abc и future, пожалуйста. И расскажите про абстрактные классы

    • @PythonRussian
      @PythonRussian  3 หลายเดือนก่อน

      в список себе добавил, но это не быстро будет

  • @яиграювбравлстарс-з7и
    @яиграювбравлстарс-з7и 3 หลายเดือนก่อน

    по названию видоса, я подумал, что в очередной раз подразумевается "кончай юзать принт, переходи на нашу супер СаВрЕмЕнНуЮ новую либу, она вабще крутая, а ещё она модная и ей все гиганты пользуются, да еще и она новый стандарт индустрии" (которая на самом деле напичкана мусором и вообще работает хорошо только на чем-то мощном)

    • @PythonRussian
      @PythonRussian  3 หลายเดือนก่อน +2

      нет, я только о стандартной библиотеке рассказываю, коммерческие решения каждый пусть ищет сам вместе с указанными вами проблемами.

  • @ДмитрийСафронов-р2ъ
    @ДмитрийСафронов-р2ъ 4 หลายเดือนก่อน +2

    Братан.... Попробуй свои видео смотреть на телефоне!!! Ну ты же не вчерашний блогер??? Ну нереально... Полезная информация занимает 5-10 процентов от всего экрана... Шрифт увеличь плиз....

    • @PythonRussian
      @PythonRussian  4 หลายเดือนก่อน

      это уже 20 шрифт, больше не могу, привет мир будет весь экран занимать

    • @ИринаЩепетова-и3ч
      @ИринаЩепетова-и3ч 4 หลายเดือนก่อน +2

      Я смотрю с телефона в основном, все прекрасно

  • @senser1o76
    @senser1o76 3 หลายเดือนก่อน

    Секрет полишенеля

  • @Окмен-ц1ю
    @Окмен-ц1ю 4 หลายเดือนก่อน +1

    Все хорошо, а возможно делать в какой строчке произошел этот критикал или еррор? А то если прога на много строк, и тебе выдали эти критикал, и ты не знаешь от куда ноги ростут

    • @PythonRussian
      @PythonRussian  4 หลายเดือนก่อน

      да, я то пример максимально простой показал, но на самом деле можно ошибку представлять всем стеком вызовов, где будет вся инфа, вплоть до строки, где упало.

    • @Окмен-ц1ю
      @Окмен-ц1ю 4 หลายเดือนก่อน

      @@PythonRussian круто! Надо будет тогда в тему входить, логирование в файл вообще огонь, сейчас мучаюсь этими принтами, спасибо за тему

  • @KENTSZ
    @KENTSZ หลายเดือนก่อน

    Привет! Увидел что используется giga ide, можешь прокомментировать его работу? Сильно ли отличается от PyCharm CE и от PyCharm Professional? На сколько знаю, то за основу взята именно CE версия

    • @PythonRussian
      @PythonRussian  หลายเดือนก่อน +1

      а это не гига ИДЕ, это пичарм про + плагин гигачат (про него есть отдельное видео). Но я гигаиде пробовал, скажем так - не увидел причину выбирать ее вместо пичарм комьюнити, там очень много сразу всего на борту и нужно отключать всякую джаву и груви, оставлять только питон, чтобы не мешалось

    • @KENTSZ
      @KENTSZ หลายเดือนก่อน

      @@PythonRussian спасибо за развёрнутый ответ!

  • @Oleg50600
    @Oleg50600 4 หลายเดือนก่อน +1

    Я думал будет что то еще более изящное. Но нет. Всё равно надо засорять код строчками print или logger

    • @PythonRussian
      @PythonRussian  4 หลายเดือนก่อน +2

      это кстати интересная идея -логгер без изменения логики кода

    • @Oleg50600
      @Oleg50600 4 หลายเดือนก่อน

      @@PythonRussian да. Как прекрасен был бы код без строк для отладки

  • @alexeysolovjoff5241
    @alexeysolovjoff5241 4 หลายเดือนก่อน

    Если будет желание, напишите, пожалуйста, в каких случаях надо переходить к созданию пакетов, а не модулей. Т.е. у меня есть какой-то проект, в нём куча модулей, в каждом модуле куча классов, процедур и т.д. Вопрос, зачем их группировать в пакеты, если они уже вполне логично и функционально сгруппированы в модули?

    • @PythonRussian
      @PythonRussian  4 หลายเดือนก่อน +1

      группировка в пакеты по той же причине, по какой ты группируешь и в модули - относятся к какой то теме. Ты сгруппировал предложения в главу, главы в часть, части в книгу) Это конечно не всегда нужно, но в сложно проекте обычно каждые 3-5-7 модулей относятся к чему то конкретному, например работа с клиентом, выносим в /client . Просто чтобы не было в одной папке десятков модулей. Надо подумать в какой теме про это рассказать.

    • @alexeysolovjoff5241
      @alexeysolovjoff5241 4 หลายเดือนก่อน

      @@PythonRussian Во-первых, спасибо за ответ. Во-вторых, да, понятно, что пакеты - это следующий уровень организации кода. Возможно есть какие-то хорошие практики, которые как-то регламентируют это дело или дают признаки того, что надо уже создавать пакеты, иначе получишь в одной папочке море модулей , в котором очень быстро утонешь.

  • @mutiev
    @mutiev 4 หลายเดือนก่อน

    Господя, 12 минут просмотрел - задолбался

  • @Vlad_4572
    @Vlad_4572 4 หลายเดือนก่อน

    Пришло лето, говоришь? Ну, некоторые признаки пришли, кроме тепла))

    • @PythonRussian
      @PythonRussian  4 หลายเดือนก่อน

      и не говори, не успели порадоваться, ночью опять 0

  • @anbur9197
    @anbur9197 4 หลายเดือนก่อน

    Очень классная штука. А в каком-нибудь Django, у которого модули плодятся как тараканы, такое тоже можно применять?

    • @PythonRussian
      @PythonRussian  4 หลายเดือนก่อน

      уверен у Джанго уже есть какая нибудь библиотека\плагин для этого, надо просто поискать

    • @xumpocmb-404
      @xumpocmb-404 3 หลายเดือนก่อน

      у джанго есть логгер. но можно завести свой. гуглите :)

  • @peaceful_worrior
    @peaceful_worrior 4 หลายเดือนก่อน

    Тебе бы обучающий курс открыть, бро. А то в моём курсе только принт учат

    • @PythonRussian
      @PythonRussian  4 หลายเดือนก่อน

      это ближе к пенсии, как много времени появится

  • @ИльяБайков-р1и
    @ИльяБайков-р1и 4 หลายเดือนก่อน

    Большое спасибо. А где найти конфигурационный файл ?

    • @PythonRussian
      @PythonRussian  4 หลายเดือนก่อน

      по обеим ссылкам что в подписи -есть примеры конфигов

  • @junior_analyst
    @junior_analyst 4 หลายเดือนก่อน

    А как логировать асинхронный код?

    • @PythonRussian
      @PythonRussian  4 หลายเดือนก่อน

      точно также, docs.python.org/3/library/asyncio-dev.html#logging

  • @pvarankin
    @pvarankin 4 หลายเดือนก่อน

    а вы точно работаете программистами ? прямо за деньги ? )) я вот тут писал более-менее большой проект, где делил функции по файлам. и в каждой функции есть необязательный параметр debug. дальше if debug: print) если функция вызывается из __main__, то там дебаг стоит в true, если из основного файла, то false. получается у меня отладка идет с принтами, а в проде никаких лишних сообщений)

    • @PythonRussian
      @PythonRussian  4 หลายเดือนก่อน +2

      точно. А вот вы видимо невнимательно смотрели, ваше решение неудобное. Что если часть инфы нам стала нужна, а не вся (пример с INFO)? Как поменять формат даты и есть ли он там? Как начать писать в файл? Одному то с таким работать куда ни шло, а в любой компании, где есть и другие программисты надо о поддержке думать. Я не говорю про лишний аргумент в каждой(!) функции.

    • @pvarankin
      @pvarankin 4 หลายเดือนก่อน

      @@PythonRussian не, что откатывать удобнее не спорю. про уровни - ну сделать еще одну переменную)) я просто дебажу и тестирую каждую функцию отдельно, а потом выключаю логи почти совсем) в результате видно ок или не ок.

    • @PlayTheGames2
      @PlayTheGames2 3 หลายเดือนก่อน

      ​@@PythonRussianя вообще собственный класс логгера делал, тоже самое что и этот модуль, только убрал ненужный мне функционал

    • @PlayTheGames2
      @PlayTheGames2 3 หลายเดือนก่อน

      я вот только задаюсь вопросом, как в logging цвета текста настраивать

    • @PythonRussian
      @PythonRussian  3 หลายเดือนก่อน

      @@PlayTheGames2 это может быть простым решением, когда работаешь один. С другой стороны а зачем делать то, что уже есть? Ну и такое решение вряд ли оценит команда программистов - логгинг они знают или должны знать, а вот ваш класс нет.

  • @memantulov
    @memantulov 3 หลายเดือนก่อน +1

    Почему мы не можем использовать f-string в логинге?

    • @PythonRussian
      @PythonRussian  3 หลายเดือนก่อน +1

      да, это я оговорился, можем конечно, но не рекомендуется, сейчас напишу об этом в закрепленном комменте

    • @memantulov
      @memantulov 3 หลายเดือนก่อน

      @@PythonRussian теперь понятно. Спасибо за разъяснение. Теперь надо всё переделывать...

  • @ivanartemenko7896
    @ivanartemenko7896 3 หลายเดือนก่อน +1

    Поправочка, logger переваривает Ф-строки

    • @PythonRussian
      @PythonRussian  3 หลายเดือนก่อน

      да, оговорка, в закрепленном комменте поправился

  • @МаксЧирков-г4г
    @МаксЧирков-г4г 4 หลายเดือนก่อน

    На Урале лето, ты сам откуда?

  • @mifonix88
    @mifonix88 3 หลายเดือนก่อน

    Принта хватает, ботлее чем. Всё прочие решается одним классом коим можно настроить любое поведение принта. Велосипед в виде сторолнней библиотеки бессмысленен. Учите грамоту - там всё есть!

  • @Борьбазадепозит
    @Борьбазадепозит 4 หลายเดือนก่อน

    Спасибо брат ... Дебилом себя чувствую с пхп привычка шлейфом осталась принтовать все....

    • @PythonRussian
      @PythonRussian  4 หลายเดือนก่อน

      до какого то момента это может быть выходом, но чем сложнее приложение тем тяжелее с принтами

  • @yMPu_CK0T
    @yMPu_CK0T 3 หลายเดือนก่อน +1

    Python Is Not russian, Try To Understand!

  • @victoramartov1916
    @victoramartov1916 3 หลายเดือนก่อน

    Спасибо за ваш труд.

  • @kirichenkodv
    @kirichenkodv 3 หลายเดือนก่อน

    Крутяк! Лучшее видео про логирование

  • @ГубкаБоб-р8ъ
    @ГубкаБоб-р8ъ 4 หลายเดือนก่อน

    Отличный материал. Не понял вот что, основной экземпляр логгера должне создаваться именно в файле где точка входа в программу или не обязательно? logging.conf создается при первом срабатывании логгера, и потом настройки в main файле можно удалить и использовать загрузив их из logging.conf?

    • @PythonRussian
      @PythonRussian  4 หลายเดือนก่อน

      Вообще не обязательно, но нередко именно так делают, рутовый и все наследники. Второй вопрос если честно не понял. На самой ранней стадии программы, при старте надо загрузить настройки логирования и применить их, после этого файл .конф тебе не нужен.

    • @anbur9197
      @anbur9197 4 หลายเดือนก่อน +2

      нет, конфиг для логгера он написал отдельно еще до записи видео и потом просто применил его в программе