Я использую асинхронный декоратор djutils, который имеет неприятный побочный эффект: он не отправляет электронные письма трассировки при возникновении исключения, поскольку он работает в отдельном потоке.
Однако он имеет следующееместо для установки регистратора.
def worker_thread():
while 1:
func, args, kwargs = queue.get()
try:
func(*args, **kwargs)
except:
pass # <-- log error here
finally:
queue.task_done()
Я подтвердил, что это сработает, но даже при удаленной попытке / исключении он не отключит регистратор трассировки Django.
Пока это 'Было бы довольно легко сказать, чтобы он записывал в db / файл при исключении, я бы очень хотел, чтобы он отправлял обычную трассировку, как определено в настройках.Как я могу это сделать?
Редактировать: Ответ, кажется, связан с django.utils.log.AdminEmailHandler - но мне трудно найти пример.
Редактировать 2: Вот моя текущая (99% вероятная ошибка) попытка.
from django.utils.log import AdminEmailHandler
def worker_thread():
while 1:
func, args, kwargs = queue.get()
try:
func(*args, **kwargs)
except:
import logging
from django.conf import settings
print settings.EMAIL_HOST
logger = logging.getLogger("async.logger")
logger.exception("Async exploded")
AdminEmailHandler
pass # <-- log error here
finally:
queue.task_done()