From 91b2ca940d24ce32fad30e28f753e1d2680e6694 Mon Sep 17 00:00:00 2001 From: Pavel Raiskup Date: Oct 04 2018 14:24:18 +0000 Subject: Merge #424 `[backend] fix tracebacks in copr-backend-log` --- diff --git a/backend/backend/daemons/log.py b/backend/backend/daemons/log.py index 4fd7cae..a6a8fc7 100644 --- a/backend/backend/daemons/log.py +++ b/backend/backend/daemons/log.py @@ -43,6 +43,11 @@ class CustomFilter(logging.Filter): if "traceback" in event: record.msg = "{}\n{}".format(record.msg, event.pop("traceback")) + # '%s %s' % (a, b) requires tuple, while + # json.loads(json.dumps(tuple)) returns array + if "args" in event and isinstance(event["args"], list): + event["args"] = tuple(event["args"]) + record.lineno = int(event.pop("lineno", "-1")) record.funcName = event.pop("funcName", None) record.pathname = event.pop("pathname", None) diff --git a/backend/backend/daemons/worker.py b/backend/backend/daemons/worker.py index 927df7d..61932cb 100644 --- a/backend/backend/daemons/worker.py +++ b/backend/backend/daemons/worker.py @@ -126,7 +126,6 @@ class Worker(multiprocessing.Process): return False def init_buses(self): - self.log.info(self.opts.msg_buses) for bus_config in self.opts.msg_buses: self.msg_buses.append(MsgBusStomp(bus_config, self.log)) diff --git a/backend/backend/helpers.py b/backend/backend/helpers.py index 655a6f4..6e2203b 100644 --- a/backend/backend/helpers.py +++ b/backend/backend/helpers.py @@ -18,6 +18,7 @@ from operator import methodcaller import traceback from datetime import datetime +from threading import Thread import subprocess @@ -41,7 +42,7 @@ def pyconffile(filename): Load python file as configuration file, inspired by python-flask "from_pyfile() """ - d = types.ModuleType(str('config')) + d = types.ModuleType('bus_config({0})'.format(filename)) d.__file__ = filename try: with open(filename) as config_file: @@ -396,6 +397,14 @@ class RedisPublishHandler(logging.Handler): self.who = who def emit(self, record): + def default(obj): + if isinstance(obj, Thread): + return obj.name # shows Thread- + if isinstance(obj, types.ModuleType): + return "module " + obj.__name__ + # This is better than traceback. + return "can't convert " + str(type(obj)) + try: msg = record.__dict__ msg["who"] = self.who @@ -405,7 +414,7 @@ class RedisPublishHandler(logging.Handler): _, error, tb = msg.pop("exc_info") msg["traceback"] = format_tb(error, tb) - self.rc.publish(constants.LOG_PUB_SUB, json.dumps(msg)) + self.rc.publish(constants.LOG_PUB_SUB, json.dumps(msg, default=default)) # pylint: disable=W0703 except Exception as error: _, _, ex_tb = sys.exc_info()