Как правильно писать логи в приложении. Знакомство с модулем logging в Python

  Рет қаралды 7,419

Сурен Хоренян

Сурен Хоренян

Күн бұрын

Пікірлер: 71
@Lev-b8v
@Lev-b8v Ай бұрын
Это просто кладезь знаний! Спасибо огромное тебе, Сурен!
@SurenKhorenyan
@SurenKhorenyan Ай бұрын
Пожалуйста! Очень приятно 🥰
@podjigalgoroda6523
@podjigalgoroda6523 4 ай бұрын
Только начал читать статью на Хабре за логи, так тут видос от Сурена. Кайф!
@SurenKhorenyan
@SurenKhorenyan 4 ай бұрын
@@podjigalgoroda6523 крутяк!
@Alex-zl7wg
@Alex-zl7wg 2 ай бұрын
Как всегда изложено чётко и грамотно.
@SurenKhorenyan
@SurenKhorenyan 2 ай бұрын
Спасибо ☺️
@_radja
@_radja 17 күн бұрын
Однако необычно видеть видео по logging и не слышать ничего про конфигурацию через словарь или файл, ничего про хендлеры и взаимоотношения внутри, даже ничего про ротации, а ведь кажется, что именно это все так раздражает людей в библиотеке, поэтому и пользуют разные loguru. Я так понимаю, причина в подходе, что из потока необходимое будет хватать уже другая программа, но словно стоило немного про это поговорить. Тем не менее, спасибо, было интересно и ты очень круто доносишь информацию.
@SurenKhorenyan
@SurenKhorenyan 17 күн бұрын
Пожалуйста! В этом видео самая основа. Прям основы основ. Говорить про более сложные вещи, которые вы перечисляете, просто рано и неуместно. И так ролик большой получился. Логуру фуфло, не нужно его использовать. Кроме симпатичного вывода и более широкого трейсбека ничего интересного там нет. Пожалуйста!
@ivanalexandrovsky1909
@ivanalexandrovsky1909 4 ай бұрын
Привет! Спасибо за видос 🔥
@SurenKhorenyan
@SurenKhorenyan 4 ай бұрын
@@ivanalexandrovsky1909 привет! Пожалуйста ☺️
@den-rad
@den-rad 4 ай бұрын
Спасибо за видео!
@SurenKhorenyan
@SurenKhorenyan 3 ай бұрын
Пожалуйста!
@dmitriynekrasov3098
@dmitriynekrasov3098 3 ай бұрын
Спасибо, очень интересно. Было бы еще интересно услышать сравнение со страктлог и логуру
@SurenKhorenyan
@SurenKhorenyan 3 ай бұрын
Пожалуйста! Не использую ни то ни другое, так как и без них всё ок. Максимум это JSON formatter для вывода в JSON
@raymond4193
@raymond4193 4 ай бұрын
Привет, спасибо за качественный материал :3 Будет ли продолжение? Хотелось бы узнать как можно логировать или перехватывать логи из других фреймворков, библиотек и, например, отсылать их в брокер или куда-то еще, либо инструменты которые позволяют это делать. Так же, было бы круто узнать о других инструментах для логгирования, по типу structlog
@SurenKhorenyan
@SurenKhorenyan 4 ай бұрын
Привет, пожалуйста! Продолжение может быть и будет, но не в ближайшее время. Перехватывать логи чтобы что? Они же обычно точно также пишутся. Или у вас какая-то другая задача? Продвинуть тему видео вперед можно через бусти 🙂
@itsrealshafardenis
@itsrealshafardenis 4 ай бұрын
Подскажите, как называется эта тема для кода. Не могу понять по расцветке, но очень нравится..
@SurenKhorenyan
@SurenKhorenyan 4 ай бұрын
@@itsrealshafardenis это One Dark
@itsrealshafardenis
@itsrealshafardenis 4 ай бұрын
@@SurenKhorenyan большое спасибо
@SurenKhorenyan
@SurenKhorenyan 4 ай бұрын
@@itsrealshafardenis пожалуйста! 🥰
@popcorn_833
@popcorn_833 4 ай бұрын
Привет! Спасибо за материал! Нужно было добавить как записывать их в файлы, по времени, размеру и т.д.
@SurenKhorenyan
@SurenKhorenyan 4 ай бұрын
@@popcorn_833 привет! Пожалуйста! Ротацию логов нужно делать не на уровне приложения, логи необходимо писать в stdout / stderr А дальше супервизор собирает и ротирует логи, будь то Docker, systemd, или что-то ещё. Это не ответственность приложения, хоть и действительно в питоне можно сделать ротацию логов. Но мы этим не занимаемся
@bocik2854
@bocik2854 4 ай бұрын
@@SurenKhorenyan а не расскажешь про ELK, ротацию логов и вот это всё? Думаю многим будет полезно
@zion4d
@zion4d 4 ай бұрын
@@SurenKhorenyan уточнение про ротацию логов супервизором кажется для меня даже более ценным чем всё видео). как же я намучался в свое время с ротированием внутри приложения и не догадался просто выводить в stdout и читать journalctl
@SurenKhorenyan
@SurenKhorenyan 4 ай бұрын
@@zion4d ого. Ну, видимо, надо будет про это тоже рассказать 😅
@SurenKhorenyan
@SurenKhorenyan 4 ай бұрын
​@@bocik2854 когда-нибудь расскажу, но, наверное, не скоро. Ускорить можно через бусти 🙂
@MrSunTrope
@MrSunTrope 3 ай бұрын
Спасибо, логирование это нелюбимая тема, но знать и использовать все равно нужно, можно видео по работе с датами? И по работе с файлами pathlib к пррмеру.
@SurenKhorenyan
@SurenKhorenyan 3 ай бұрын
Пожалуйста! А с датами что? Вообще, заказ темы проходит через бусти
@ДмитрийМатов-щ2й
@ДмитрийМатов-щ2й 4 ай бұрын
Как понять философию вывода error и warning, это надо заранее знать что это ошибка получается? Но ее надо исправлять, а не выводить info и debug понятно вроде, info временно выключаем, debug используем, зачем остальные не могу понять
@SurenKhorenyan
@SurenKhorenyan 3 ай бұрын
Зависит от ситуации. Эти уровни тоже применимы и довольно часто. Иногда нельзя точно предсказать ситуацию более узко, чем "что-то пошло не так, вот детали:"
@koltdota
@koltdota 3 ай бұрын
подскажите, когда я пытаюсь повторить пример с %s и передавать параметры в аргументы, то у меня записывает в лог %s, а не полученное значение из аргументов
@SurenKhorenyan
@SurenKhorenyan 3 ай бұрын
А аргументы вы точно передали? Показывайте код. В чате в телеграм быстрее подскажем
@koltdota
@koltdota 3 ай бұрын
@@SurenKhorenyan кинул скрин в чат
@bocik2854
@bocik2854 4 ай бұрын
Спасибо за видос! Как называется твоя тема в pycharm?
@SurenKhorenyan
@SurenKhorenyan 4 ай бұрын
@@bocik2854 пожалуйста! Это One Dark
@bocik2854
@bocik2854 4 ай бұрын
@@SurenKhorenyan спс🙂
@SurenKhorenyan
@SurenKhorenyan 4 ай бұрын
@@bocik2854 🤝
@никитакорж-ю7э
@никитакорж-ю7э 4 ай бұрын
Было бы круто увидеть, как применяется логирование в fastapi проекте. Не совсем понятно, что и как нужно правильно логировать (каждую ли апи или только те, которые важны).
@SurenKhorenyan
@SurenKhorenyan 4 ай бұрын
@@никитакорж-ю7э логирование там применяется точно также. Логировать нужно только то, что вам важно увидеть при чтении логов
@forceloop1789
@forceloop1789 3 ай бұрын
в реальных проектах реализация логов такая же? я думал, что логи реализуются через декораторы (wrapperы) и сохраняются в специальные файлы, а не выводятся в консоль
@SurenKhorenyan
@SurenKhorenyan 3 ай бұрын
@@forceloop1789 логи надо писать в stdout (как показано, в консоль), чтобы не тормозить программу работой с диском. А уже оттуда будет другая программа читать всё написанное и сохранять куда надо. Декораторы тут вообще не играют роли
@forceloop1789
@forceloop1789 3 ай бұрын
@@SurenKhorenyan понял, спасибо за быстрый ответ, ты профи
@SurenKhorenyan
@SurenKhorenyan 3 ай бұрын
@@forceloop1789 пожалуйста 🥰
@forceloop1789
@forceloop1789 2 ай бұрын
@@SurenKhorenyan было бы ешё интересно и полезно услышать от тебя, как реализуются метрики в fastapi. Через Grafana или Prometheus, или как вообще ?
@SurenKhorenyan
@SurenKhorenyan 2 ай бұрын
Всё зависит от того, кто принимает решения. Можно прометеус, можно складывать в кликхаус, а отображать в графане
@vasopython1547
@vasopython1547 4 ай бұрын
спасибо ❤
@SurenKhorenyan
@SurenKhorenyan 4 ай бұрын
@@vasopython1547 пожалуйста 🥰
@efibutov
@efibutov 4 ай бұрын
Не успел досмотреть до конца, поэтому, возможно, вопрос лишний: насколько логгирование замедляет работу приложения, и как устранить подобную проблему?
@SurenKhorenyan
@SurenKhorenyan 4 ай бұрын
@@efibutov ни насколько. Вообще, преждевременная оптимизация это вредное занятие, не тратьте на него время
@efibutov
@efibutov 4 ай бұрын
@@SurenKhorenyan я о том, что если логгер типа кибаны, то это медленный IO, и, возможно, это будет тормозить ...
@SurenKhorenyan
@SurenKhorenyan 4 ай бұрын
@@efibutov если у вас есть реальные примеры, то давайте обсуждать, можете показать в чате в телеграм. Если делать логи как я показал в ролике, замедления не будет точно. Все логи надо выводить в stdout / stderr
@efibutov
@efibutov 4 ай бұрын
@@SurenKhorenyan Согласен, если в СТД, проблем быть не должно (конечно,м предполагаем, что речь идёт не о CPU-bound аппликации). Однако если есть логгер, который пробрасывает логи, скажем, в эластик, то послать данные по сетке может занимать время, если это синхронные запросы
@efibutov
@efibutov 4 ай бұрын
@@SurenKhorenyan Просто я подумал, что если на каждый чих будет что-то слаться по сетке в логгер, то аппликация может замедлиться
@dmitry-lz1ny
@dmitry-lz1ny 2 ай бұрын
Форматирование из C. В целом думаю это многие и так знают.
@SurenKhorenyan
@SurenKhorenyan 2 ай бұрын
@@dmitry-lz1ny немногие знают, из чего сделан питон 🙂
@dmitry-lz1ny
@dmitry-lz1ny 2 ай бұрын
@@SurenKhorenyan Ну сейчас реально могут на собесе даже на джуна спросить немного про C. Конечно если не знаешь тебя врядтли сбросят, но плюсик будет не плохой. Да и в целом полезные знания, для понимания программирования в целом.
@SurenKhorenyan
@SurenKhorenyan 2 ай бұрын
@@dmitry-lz1ny могут.. да, вы правы, знания точно будут не лишними
@Kampogolik
@Kampogolik 4 ай бұрын
Уровень info для отладки? Что то какой то неправильный мед.
@SurenKhorenyan
@SurenKhorenyan 4 ай бұрын
@@Kampogolik всё так. На debug уровне слишком много всего сыпет в логи. На проде всё равно должно быть от WARNING и выше
@Kampogolik
@Kampogolik 4 ай бұрын
@@SurenKhorenyan info - это не дебаг уровень. Допустим на проде нам нужно знать, когда залогинился или разлогинился пользователь (думаю, что с этим Вы согласны). Так это ну никак не Варнинг и не Дебаг. Вполне себе обычный Инфо.
@SurenKhorenyan
@SurenKhorenyan 3 ай бұрын
Если нас волнует событие входа / выхода пользователя, мы это пишем в базу данных, можно в тот же кликхаус. Никак не в логи. Логи нужны для отладки, когда мы уже поняли, что нам надо разобраться в последовательности событий
@Kampogolik
@Kampogolik 3 ай бұрын
@@SurenKhorenyan логи нужны и для разбора ситуаций на продакшене. Или у Вас идеальный код и не может возникнуть ошибки в проде? Конечно, ситуации бывают разные, но когда в проде сразу по логу понятно что произошло - это жирный плюс. Поэтому крайне не согласен с Вами на счёт типа Info
@SurenKhorenyan
@SurenKhorenyan 3 ай бұрын
@@Kampogolik на продакшн логи от уровня Warning и выше. Инфо вы всё равно не увидите.
@sergeipopov
@sergeipopov 3 ай бұрын
Как будто бы не работает оптимизация % форматирования... Ниже выводим только уровень INFO, но общее время всё-равно 4 секунды (вместо ожидаемых 3 секунд). Почему - не понятно. start_time = time.time() logging.debug("Result: %d", complex_function()) logging.info("Result: %d", complex_function()) logging.debug("Result: {}".format(complex_function())) logging.debug(f"Result: {complex_function()}") end_time = time.time() total_time = end_time - start_time print(f"Total execution time: {total_time:.2f} seconds") ======== # python src/time_tester.py 2024-08-30 15:15:28,872 - Result: 42 Total execution time: 4.01 seconds
@SurenKhorenyan
@SurenKhorenyan 3 ай бұрын
@@sergeipopov привет Я в ролике показывал проверку isEnabledFor. Для подобных ситуаций нужно делать под флагом обязательно, если какую-то долгую функцию только для лога дёргаете
Правильные аннотации *args и **kwargs в Python
18:47
Сурен Хоренян
Рет қаралды 3,6 М.
Лучший Гайд по Логированию За 12 Минут
12:33
Twin Telepathy Challenge!
00:23
Stokes Twins
Рет қаралды 133 МЛН
Симбу закрыли дома?! 🔒 #симба #симбочка #арти
00:41
Симбочка Пимпочка
Рет қаралды 6 МЛН
ТВОИ РОДИТЕЛИ И ЧЕЛОВЕК ПАУК 😂#shorts
00:59
BATEK_OFFICIAL
Рет қаралды 7 МЛН
كم بصير عمركم عام ٢٠٢٥😍 #shorts #hasanandnour
00:27
hasan and nour shorts
Рет қаралды 11 МЛН
Как стать тестировщиком с нуля за 2 месяца | Роадмап QA
8:38
Pablo | Взламываем найм в IT
Рет қаралды 2,4 М.
Modern Python logging
21:32
mCoding
Рет қаралды 204 М.
Python Logging: How to Write Logs Like a Pro!
11:02
ArjanCodes
Рет қаралды 180 М.
Python Logging - Tutorial
15:02
Tech With Tim
Рет қаралды 168 М.
Twin Telepathy Challenge!
00:23
Stokes Twins
Рет қаралды 133 МЛН