Настройка ведения журнала Карригелла для записи неперехваченных исключенийPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Настройка ведения журнала Карригелла для записи неперехваченных исключений

Сообщение Anonymous »

Я управляю сторонним приложением, созданным с помощью платформы Python Karrigell.
Я добавил новый регистратор my_logger, который объявляется и создается в файле с именем my_logging.py
Я вижу, что регистратор может правильно заполнять файл журнала сообщениями

Код: Выделить всё

my_logger.info("message from my_logger.info")
Однако, похоже, он не может регистрировать ни обратные трассировки, ни обработанные, ни необработанные исключения.
Вот несколько сценариев:
В файле html-шаблона моего проекта customer_file.hip есть следующие сценарии:
сценарий 1 — синтаксическая ошибка
customer_file.hip

Код: Выделить всё

from my_logging import my_logger
import sys, traceback

...

try:
my_logger.info("my_logger.info - I am going to raise a exception inside a 'try' block.")
hello, this line triggers a handled error

except Exception:
my_logger.info("exception for file {}, name {}".format(__file__, __name__))
traceback.print_exc(file=sys.stderr)
my_logger.info("Logged the exception traceback.")
result
обратная трассировка печатается в браузере, когда я пытаюсь получить доступ к странице, отображаемой моим шаблоном, но нет в моем файле журнала.
Изображение

сценарий 2 – необработанный исключение
customer_file.hip

Код: Выделить всё

from my_logging import my_logger
import sys, traceback

...

my_logger.info("my_logger.info - I am going to raise an unhandled exception.")
new_variable = undeclared_variable
my_logger.info("this line of code is never reached.")
результат
только я собираюсь вызвать необработанное исключение печатается в моем файле журнала.
сценарий 3 — обработанное исключение
customer_file.hip

Код: Выделить всё

from my_logging import my_logger
import sys, traceback

...

try:
my_logger.info("my_logger.info - I am going to raise a exception inside a 'try' block.")
new_variable = undeclared_variable
my_logger.info("this line of code is never reached.")

except Exception:
my_logger.info("exception for file {}, name {}".format(__file__, __name__))
traceback.print_exc(file=sys.stderr)
my_logger.info("Logged the exception traceback.")
результат
только я собираюсь вызвать исключение внутри блока 'try' печатается в моем файле журнала.

Ниже приведен код my_logging.py, как я могу изменить его, чтобы отслеживать как обработанные, так и необработанные исключения?
my_logging.py

Код: Выделить всё

import os
import datetime

import sys
import traceback

import logging
from logging.handlers import TimedRotatingFileHandler

def setup_logger():

##############
# stdout part
##############

# log filename
# --------------

log_dir = "/home/myuser/var/log/my_project"
log_filename = "my_project.log"
log_file_path = os.path.join(log_dir, log_filename)

# log directory
# ---------------

if not os.path.exists(log_dir):
try:
os.makedirs(log_dir)
except OSError as e:
if e.errno != 17:  # Errno 17 = "File exists"
raise  # raise exception if  the error is not "file exists"

# logger name
# --------------
logger_1 = logging.getLogger("my_project_logger")

# logger level
# --------------
logger_1.setLevel(logging.DEBUG)  # logger's level (DEBUG, INFO, WARNING, ERROR, CRITICAL)

# Formatter
# -----------

formatter_1 = logging.Formatter(
"[%(asctime)s %(name)s]  %(message)s"
# %(levelname)s
)

# File handler
# --------------

# define a rotating File Handler
file_handler_1 = TimedRotatingFileHandler(
log_file_path,
when="midnight",
interval=1,
backupCount=7
)

return logger_1

# instantiate the logger

my_logger = setup_logger()
что я пробовал
Я пытался добавить глобальный обработчик для неперехваченных выражений:
в my_logging.py, в конце, после строки

Код: Выделить всё

my_logger = setup_logger()
Я добавил

Код: Выделить всё

def handle_exception(exc_type, exc_value, exc_traceback):
if issubclass(exc_type, KeyboardInterrupt):
sys.__excepthook__(exc_type, exc_value, exc_traceback)
return
my_logger.error("Uncaught exception", exc_info=(exc_type, exc_value, exc_traceback))

sys.excepthook = handle_exception
но сообщение об ошибке не записывается.

Подробнее здесь: https://stackoverflow.com/questions/792 ... exceptions
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»