From 6f05e7747ffe15c3b59dbba9d67609b5f99bc120 Mon Sep 17 00:00:00 2001 From: Ivan Shcheklein Date: Sun, 23 Jun 2019 13:59:11 -0700 Subject: [PATCH] logger: use custom handler to propagare logging exceptions --- dvc/logger.py | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/dvc/logger.py b/dvc/logger.py index 35e873738..45432eed4 100644 --- a/dvc/logger.py +++ b/dvc/logger.py @@ -10,6 +10,12 @@ import logging.config import colorama +class LoggingException(Exception): + def __init__(self, record): + msg = "failed to log {}".format(str(record)) + super(LoggingException, self).__init__(msg) + + class ExcludeErrorsFilter(logging.Filter): def filter(self, record): return record.levelno < logging.ERROR @@ -149,6 +155,12 @@ class ColorFormatter(logging.Formatter): progress.clearln() +class LoggerHandler(logging.StreamHandler): + def handleError(self, record): + super(LoggerHandler, self).handleError(record) + raise LoggingException(record) + + def setup(level=logging.INFO): colorama.init() @@ -159,14 +171,14 @@ def setup(level=logging.INFO): "formatters": {"color": {"()": ColorFormatter}}, "handlers": { "console": { - "class": "logging.StreamHandler", + "class": "dvc.logger.LoggerHandler", "level": "DEBUG", "formatter": "color", "stream": "ext://sys.stdout", "filters": ["exclude_errors"], }, "console_errors": { - "class": "logging.StreamHandler", + "class": "dvc.logger.LoggerHandler", "level": "ERROR", "formatter": "color", "stream": "ext://sys.stderr",