Есть ли способ, с помощью которого я могу обрабатывать некоторую "обработку ошибок" в веб-приложении Pyramid? В настоящее время я выполнил ведение журнала исключений в базе данных (через документы http://docs.pylonsproject.org/projects/pyramid_cookbook/en/latest/logging/sqlalchemy_logger.html), и я верну сообщения на свои взгляды, чтобы поставить "дружеское" лицо на то, что случилось.
Но есть ли что-то, что я могу реализовать, чтобы показать какой-то общий "Упс, вы столкнулись с проблемой, и мы изучаем его" для чего-либо еще, что я явно не поймаю, и я мог бы использовать указанную выше ошибку обработчик за кулисами для записи в базу данных? Или, что я должен искать в поисках?
Спасибо,
edit, так как я не могу вместить все это в комментарий: , Спасибо, это похоже на то, что я ищу!
Одна вещь, с которой я сталкиваюсь, я не знаю, связано это или нет....
Итак, я реализую SQL-регистратор как показано выше:
class SQLAlchemyHandler(logging.Handler):
# A very basic logger that commits a LogRecord to the SQL Db
def emit(self, record):
trace = None
exc = record.__dict__['exc_info']
if exc:
trace = traceback.format_exc(exc)
log = Log(
logger=record.__dict__['name'],
level=record.__dict__['levelname'],
trace=trace,
msg=record.__dict__['msg'],)
DBSession.add(log)
DBSession.flush()
#transaction.commit()
Мне пришлось вытащить вызов transaction.commit() и вместо этого использовать .flush(), потому что при использовании транзакции я получал исключение SQLAlchemy DetachedInstanceError. Я думаю, это потому, что я играю в некоторые игры с передачей запроса на вспомогательную функцию и там, где она, кажется, бросает ее. Таким образом, это работает, очищая сеанс. Buuuut, что произойдет, если у меня есть оператор log.error() в моем представлении исключения, если на самом деле возникает исключение, представление улавливает его (отлично!), Но оператор журнала в представлении не получает значения. Журналы отладки в Pyramid показывают, что они написаны, но никогда не выполнялись.
Если я изменю обработчик ведения журнала обратно на transaction.commit, то исключения будут зафиксированы, но я вернусь к своей исходной проблеме. Я думаю, мне нужно сосредоточиться на том, что я делаю в своей вспомогательной функции, которая вызывает его, в первую очередь, но я все еще изучаю SQLAlchemy в целом. Иногда это может быть немного странно.