#421 [backend] fix traceback for non-serializable log message
Closed 5 years ago by praiskup. Opened 5 years ago by praiskup.
Unknown source serialize-all-msgs  into  master

@@ -126,7 +126,6 @@

          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))

  

file modified
+11 -2
@@ -18,6 +18,7 @@

  import traceback

  

  from datetime import datetime

+ from threading import Thread

  

  import subprocess

  
@@ -41,7 +42,7 @@

      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 @@

          self.who = who

  

      def emit(self, record):

+         def default(obj):

+             if isinstance(obj, Thread):

+                 return obj.name # shows Thread-<ID>

+             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 @@

                  _, 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()

[backend] fix traceback for non-serializable log message

In some cases we happen to log (through redis logger) objects
which are not json-serializable (by default). This caused
ugly exceptions before, e.g.

TypeError: Object of type 'Thread' is not JSON serializable

So let's provide some (even if not really nice) always-ready
serialization default so we never loose the whole log message.

rebased onto d6885d07a85183805e33eb489a01eb4849747a41

5 years ago

rebased onto 1f8d2846c9a930c3652d988776a1a32320a64291

5 years ago

rebased onto 7e46607

5 years ago

Metadata Update from @praiskup:
- Pull-request tagged with: release-blocker

5 years ago

Pull-Request has been closed by praiskup

5 years ago