2015-08-21 2 views
2

Я ищу наилучшее решение, где я могу сделать следующее:Django Framework: Как поймать все ошибки происходящих серверов централизованно и инициирующие события на таких ошибках

  1. Лови каждое исключение, где когда-либо это происходит в django
  2. Запуск различных событий, таких как почтовые отправления, сообщения поставщикам Google Analytics или вход в журнал.
  3. Создайте центральный обработчик ошибок, который будет принимать разные действия в разных условиях.

Если есть способ сделать это, как это можно сделать и как это сделать?

+0

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

ответ

0

Во время написания приложения, вы можете использовать следующий подход:

Всякий раз, когда ваше приложение вызывает исключение, использовать пользовательские, исключения для отдельных приложений, как этот

class FooException(Exception): 
    """Base class for all app specific exceptions""" 
    pass 

classFooPermissionException(FooException): 
    """Specific class for permission related exceptions""" 
    pass 

Теперь ваше приложение может предоставить пользовательские промежуточного программного

class FooExceptionMiddleware(object): 
    """App specific middleware to handle app specific errors""" 

    def process_exception(self, request, e): 
     """Processes exceptions""" 
     if isinstance(e, FooException): 

      if isinstance(e, FooPermissionException): 
       # handle PermissionExceptions here... 

     return None 

Вы можете прочитать больше о Django промежуточного here.

Edit:

Я думаю, что вы можете использовать выше подход, чтобы поймать всех Exceptions: Посмотрите на Django's exception source code. Внутренние исключения Django - это братья и сестры Exception. Итак, с чем-то вроде следующего кода, вы можете поймать все исключения, где бы они ни поднимались в вашем проекте:

class AllExceptionMiddleware(object): 
    def process_exception(self, request, e): 
     if isinstance(e, Exception): 
      # do stuff 
     return None 
+0

Я хочу избежать этого процесса вручную добавления особых исключений в местах в коде. Существует ли конкретный способ, при котором любое исключение, возникшее во время выполнения, может быть уловлено вместе с обычными ошибками, такими как ошибки 4 ** и 5 **, и может быть выполнено конкретное действие. –

+0

@PriyabrataPatnaik Я сделал редактирование. Обратите внимание, что это непроверенный код! – Mischback

2

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

+0

Я уже изучил это. Поскольку я очень новичок в программировании на питоне. Будет полезно иметь пошаговое решение для этого. Это, безусловно, поможет другим включить его в свои приложения, а также –

Смежные вопросы