diff --git a/nodepool/logconfig.py b/nodepool/logconfig.py index d8cbc0da8..3f296b1a1 100644 --- a/nodepool/logconfig.py +++ b/nodepool/logconfig.py @@ -25,6 +25,7 @@ _DEFAULT_SERVER_LOGGING_CONFIG = { 'version': 1, 'formatters': { 'simple': { + 'class': 'nodepool.logconfig.MultiLineFormatter', 'format': '%(asctime)s %(levelname)s %(name)s: %(message)s' }, }, @@ -89,6 +90,24 @@ def load_config(filename: str): return FileLoggingConfig(filename) +class MultiLineFormatter(logging.Formatter): + def format(self, record): + rec = super().format(record) + ret = [] + # Save the existing message and re-use this record object to + # format each line. + saved_msg = record.message + for i, line in enumerate(rec.split('\n')): + if i: + record.message = ' ' + line + ret.append(self.formatMessage(record)) + else: + ret.append(line) + # Restore the message + record.message = saved_msg + return '\n'.join(ret) + + class LoggingConfig(object, metaclass=abc.ABCMeta): @abc.abstractmethod diff --git a/releasenotes/notes/multiline-logging-b55f038e1077c7bb.yaml b/releasenotes/notes/multiline-logging-b55f038e1077c7bb.yaml new file mode 100644 index 000000000..75009d9ad --- /dev/null +++ b/releasenotes/notes/multiline-logging-b55f038e1077c7bb.yaml @@ -0,0 +1,5 @@ +--- +features: + - | + Multi-line log messages (such as tracebacks from image builds) are now + prefixed in the same manner as single-line messages.