Вручную запустить журнал трассировки / исключений Django 1.3 - PullRequest
3 голосов
/ 29 сентября 2011

Я использую асинхронный декоратор 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()

1 Ответ

3 голосов
/ 23 октября 2011

Во-первых, настройте свои параметры ведения журнала i settings.py:


    LOGGING = {
        'version': 1,
        'disable_existing_loggers': False,
        'handlers': {
            'mail_admins': {
                'level': 'ERROR',
                'class': 'django.utils.log.AdminEmailHandler'
            }
        },
        'loggers': {
            'myproject': {
                'handlers': ['mail_admins'],
                'level': 'INFO',
                'propagate': True,
            },
            'django.request': {
                'handlers': ['mail_admins'],
                'level': 'ERROR',
                'propagate': True,
            },
        }
    }

. Теперь все средства ведения журнала, начинающиеся с «myproject», должны использовать AdminEmailHandler, ваш код должен выглядеть следующим образом:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...