У меня есть веб-приложение Flask, а конфигурация регистрации Python выполняется через dictConfig при запуске приложения. Обработчик для записи определенных журналов в базу данных привязан к logger 'test.module' Журналы, сделанные для этого регистратора, записываются в базу данных, только если logging.basicConfig(level=logging.DEBUG)
также вызывается при запуске приложения. В противном случае в базу данных не записываются журналы. Я знаю, что basicConfig просто привязывает streamHandler к корневому журналу. Я думаю, что это должно быть неуместно, потому что я не хочу, чтобы что-то было сделано корневым регистратором. Почему это не работает без basicConfig?Обработчики лесозаготовок не работают без basicConfig
Я добавил, как я запускаю регистраторы и мою конфигурацию ниже.
class DbHandler(logging.Handler):
def __init__(self, level=logging.NOTSET):
logging.Handler.__init__(self, level)
def emit(self, record):
record.message = self.format(record)
log = DbModel()
log.message = record.message
log.save()
LOGGING = {
'version': 1,
'handlers': {
'db_log': {
'level': 'DEBUG',
'class': 'test.handlers.DbHandler',
},
},
'loggers': {
'test.important_module': {
'handlers': [
'db_log'
],
},
}
# logging.basicConfig(level=logging.DEBUG) # Doesnt work without this
logging.config.dictConfig(LOGGING)
logger = logging.getLogger('test.important_module')
logger.info('Making a test')
Может вам код, который вы используете для настройки регистратора и как это относится к коду, делая фактическую регистрацию ? То, что вы предоставили до сих пор, несколько расплывчато ... – isedev
@isedev Я добавил его сейчас – refik
С точки зрения удобства использования я бы переосмыслил, что обработчик модифицировал 'record.message' как побочный эффект. Просто установите 'log.message = self.format (запись)' непосредственно. –