diff options
| -rw-r--r-- | common/src/leap/soledad/common/log.py | 40 | 
1 files changed, 39 insertions, 1 deletions
diff --git a/common/src/leap/soledad/common/log.py b/common/src/leap/soledad/common/log.py index 3f026045..59a47726 100644 --- a/common/src/leap/soledad/common/log.py +++ b/common/src/leap/soledad/common/log.py @@ -25,9 +25,47 @@ to stdout, mainly for development purposes.  import os  import sys +import time  from twisted.logger import Logger  from twisted.logger import textFileLogObserver +from twisted.logger import LogLevel +from twisted.logger import InvalidLogLevelError +from twisted.python.failure import Failure + + +# What follows is a patched class to correctly log namespace and level when +# using the default formatter and --syslog option in twistd. This seems to be a +# known bug but it has not been reported to upstream yet. + +class SyslogLogger(Logger): + +    def emit(self, level, format=None, **kwargs): +        if level not in LogLevel.iterconstants(): +            self.failure( +                "Got invalid log level {invalidLevel!r} in {logger}.emit().", +                Failure(InvalidLogLevelError(level)), +                invalidLevel=level, +                logger=self, +            ) +            return + +        event = kwargs +        event.update( +            log_logger=self, log_level=level, log_namespace=self.namespace, +            log_source=self.source, log_format=format, log_time=time.time(), +        ) + +        # ---------------------------------8<--------------------------------- +        # this is a workaround for the mess between twisted's legacy log system +        # and twistd's --syslog option. +        event["system"] = "%s#%s" % (self.namespace, level.name) +        # ---------------------------------8<--------------------------------- + +        if "log_trace" in event: +            event["log_trace"].append((self, self.observer)) + +        self.observer(event)  def getLogger(*args, **kwargs): @@ -39,7 +77,7 @@ def getLogger(*args, **kwargs):      if os.environ.get('SOLEDAD_LOG_TO_STDOUT'):          kwargs({'observer': textFileLogObserver(sys.stdout)}) -    return Logger(*args, **kwargs) +    return SyslogLogger(*args, **kwargs)  __all__ = ['getLogger']  | 
