Мне требуется логировать все ошибки, которые случились в проекте. Особенно те, которые произошли в других потоках.
В flask это делается через указания обработчика ошибок:
app.register_error_handler(Exception, _error_handler)
def _error_handler(error):
log.exception(error)
Чего-то подобного в django я не нашел. Решил сделать это через middleware:
# middleware.py:
class LoggingExceptionMiddleware(MiddlewareMixin):
def process_exception(self, request, exception):
logger.error('LoggingExceptionMiddleware.process_exception was called')
logger.exception(exception)
# views.py
def exception(request):
raise Exception('bla bla')
def exception_in_new_thread(request):
logger.debug('exception_in_new_thread called')
Thread(target=buggy_func).start()
return HttpResponse('ok')
def buggy_func():
logger.debug('buggy_func called')
sleep(5)
raise Exception('hi from buggy_func')
Но этот побдход не сработал. Если ошибка случается в потоке джанги (def exception), то миддлварь срабатывает. Но если же в другом потоке (exception_in_new_thread), то ошибка не ловится.
Как вы логируете _ВСЕ_ исключения, что случаются в проекте?