PYTHONL Telegram 4974
🐍 Python Gotcha: как правильно логировать необработанные исключения

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

Пример кода:

import logging

logger = logging.getLogger(__name__)
logger.setLevel(logging.INFO)
handler = logging.FileHandler("app.log")
handler.setFormatter(logging.Formatter("%(asctime)s %(name)s %(levelname)s %(message)s"))
logger.addHandler(handler)

def divide(a, b):
return a / b

def main():
logger.info("Start")
logger.info(divide(10, 0)) # ZeroDivisionError
logger.info("End")

if __name__ == "__main__":
main()


📄 В логе:



2025-07-24 12:00:00 __main__ INFO Start


А сам ZeroDivisionError — только в консоли. Лог молчит.

Решение — использовать sys.excepthook:


import sys

def handle_uncaught_exception(exc_type, exc_value, exc_traceback):
logger.critical("Uncaught exception", exc_info=(exc_type, exc_value, exc_traceback))

sys.excepthook = handle_uncaught_exception


Теперь, если произойдёт ошибка, она попадёт в лог:



CRITICAL Uncaught exception
Traceback (most recent call last):
...
ZeroDivisionError: division by zero


📌 Вывод:
— Необработанные исключения не попадут в лог, если явно не подключить sys.excepthook
— Это особенно важно в продакшене: лог покажет, где и почему всё сломалось
— Просто и надёжно

🔗 Подробнее

@pythonl
17👍6🔥6



tgoop.com/pythonl/4974
Create:
Last Update:

🐍 Python Gotcha: как правильно логировать необработанные исключения

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

Пример кода:

import logging

logger = logging.getLogger(__name__)
logger.setLevel(logging.INFO)
handler = logging.FileHandler("app.log")
handler.setFormatter(logging.Formatter("%(asctime)s %(name)s %(levelname)s %(message)s"))
logger.addHandler(handler)

def divide(a, b):
return a / b

def main():
logger.info("Start")
logger.info(divide(10, 0)) # ZeroDivisionError
logger.info("End")

if __name__ == "__main__":
main()


📄 В логе:



2025-07-24 12:00:00 __main__ INFO Start


А сам ZeroDivisionError — только в консоли. Лог молчит.

Решение — использовать sys.excepthook:


import sys

def handle_uncaught_exception(exc_type, exc_value, exc_traceback):
logger.critical("Uncaught exception", exc_info=(exc_type, exc_value, exc_traceback))

sys.excepthook = handle_uncaught_exception


Теперь, если произойдёт ошибка, она попадёт в лог:



CRITICAL Uncaught exception
Traceback (most recent call last):
...
ZeroDivisionError: division by zero


📌 Вывод:
— Необработанные исключения не попадут в лог, если явно не подключить sys.excepthook
— Это особенно важно в продакшене: лог покажет, где и почему всё сломалось
— Просто и надёжно

🔗 Подробнее

@pythonl

BY Python/ django








Share with your friend now:
tgoop.com/pythonl/4974

View MORE
Open in Telegram


Telegram News

Date: |

As of Thursday, the SUCK Channel had 34,146 subscribers, with only one message dated August 28, 2020. It was an announcement stating that police had removed all posts on the channel because its content “contravenes the laws of Hong Kong.” Read now The administrator of a telegram group, "Suck Channel," was sentenced to six years and six months in prison for seven counts of incitement yesterday. Ng was convicted in April for conspiracy to incite a riot, public nuisance, arson, criminal damage, manufacturing of explosives, administering poison and wounding with intent to do grievous bodily harm between October 2019 and June 2020. With Bitcoin down 30% in the past week, some crypto traders have taken to Telegram to “voice” their feelings.
from us


Telegram Python/ django
FROM American