Почему RQ не вызывает исключения после logging.config.dictConfg? - PullRequest
0 голосов
/ 01 марта 2019

Я хотел бы использовать logging.config.dictConfig в моем RQ работнике.Но я обнаружил, что после запуска dictConfig() рабочий больше не будет вызывать исключения, которые не будут работать в рабочей среде.

Вот мой рабочий код:

import logging
import logging.config

config = {
    'version': 1,
    'disable_existing_loggers': True,
    'handlers': {
        'console': {
            'class': 'logging.StreamHandler',
            'stream': 'ext://sys.stdout',
            'level': 'DEBUG'
        }
    },
    'root': {
        'level': 'DEBUG',
        'handlers': ['console']
    }
}

logging.config.dictConfig(config)

log = logging.getLogger('test')


def raises():
    '''This is the worker function'''
    log.info('running raises')
    raise RuntimeError

Когда рабочийполучая задание, он просто останавливает выполнение после оператора log без возражений:

12:28:09 log-test: log_test.raises() (d59ad742-4dcd-4d4f-84e2-6f747c21d603)
running raises

EDIT: еще одна интересная часть головоломки состоит в том, что sys.excepthook не вызывается в рабочем контексте.

1 Ответ

0 голосов
/ 01 марта 2019

Оказывается, что RQ довольно тесно связан с его настройкой регистрации.На самом деле, класс Worker содержит экземпляр Logger - когда вызывается dictConfig, ссылки на этот разрыв логгера.

Решением было включить регистратор rq.worker в мойконфиг:

config = {
    'version': 1,
    'formatters': {
        'rq': {
            'format': '%(asctime)s %(message)s',
            'datefmt': '%H:%M:%S'
        }
    },
    'handlers': {
        'console': {
            'class': 'logging.StreamHandler',
            'stream': 'ext://sys.stdout',
            'level': 'DEBUG'
        },
        'rq': {
            'class': 'rq.utils.ColorizingStreamHandler',
            'formatter': 'rq'
        }
    },
    'loggers': {
        'rq.worker': {
            'level': 'INFO',
            'handlers': ['rq'],
            'propagate': False
        }
    },
    'root': {
        'class': 'logging.RootLogger',
        'level': 'DEBUG',
        'handlers': ['console']
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...