From b677bfa945c898c4b8e1e13d22386a99ef00ffe5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hugo=20H=C3=B6rnquist?= Date: Tue, 25 Jan 2022 17:12:15 +0100 Subject: Propagate some log levels from subprocesses. --- main.py | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/main.py b/main.py index 94e55ca..122cfd9 100755 --- a/main.py +++ b/main.py @@ -84,6 +84,18 @@ logging.config.dictConfig(get_conf('logging')) logger = logging.getLogger(__name__) +log_levels = { + 'DEBUG': logging.DEBUG, + 'INFO': logging.INFO, + 'WARNING': logging.WARNING, + 'WARN': logging.WARNING, + 'ERROR': logging.ERROR, + 'ERR': logging.ERROR, + 'CRITICAL': logging.CRITICAL, + 'FATAL': logging.CRITICAL, + } + + def subprocess_with_log(*args, capture_output=False, **kv_args): """ Run a process as by subprocess.run, but also log output which isn't captured by user. @@ -112,7 +124,18 @@ def subprocess_with_log(*args, capture_output=False, **kv_args): with get_port(process) as pipe: for line in iter(pipe.readline, sentinel): - logger.debug('%i: %s', process.pid, line) + level = logging.DEBUG + try: + if type(line) == bytes: + line = line.decode('UTF-8').rstrip() + # line guaranteed a string here + if m := re.match('==> ([A-Z]+): (.*)', line): + level = log_levels.get(m[1], logging.DEBUG) + line = m[2] + except UnicodeDecodeError: + pass + + logging.log(level, '%i: %s', process.pid, line) process.wait() -- cgit v1.2.3