aboutsummaryrefslogtreecommitdiff
path: root/src/Logging.py
diff options
context:
space:
mode:
authorGravatar jesopo2019-10-11 15:12:26 +0100
committerGravatar jesopo2019-10-11 15:12:26 +0100
commitde389b34b817d0bcc8940730f45a2c50407df1cf (patch)
tree0cc9047c7af43a438c6b2758dc6259172d1915ff /src/Logging.py
parentfirst draft of infrastructure for unix domain control socket (diff)
signature
add first real cli functionality: showing log
Diffstat (limited to 'src/Logging.py')
-rw-r--r--src/Logging.py21
1 files changed, 21 insertions, 0 deletions
diff --git a/src/Logging.py b/src/Logging.py
index 8c141c8f..9d24fce0 100644
--- a/src/Logging.py
+++ b/src/Logging.py
@@ -15,8 +15,18 @@ class BitBotFormatter(logging.Formatter):
datetime_obj = datetime.datetime.fromtimestamp(record.created)
return utils.iso8601_format(datetime_obj, milliseconds=True)
+class HookedHandler(logging.StreamHandler):
+ def __init__(self, func: typing.Callable[[int, str], None]):
+ logging.StreamHandler.__init__(self)
+ self._func = func
+
+ def emit(self, record):
+ self._func(record.levelno, self.format(record))
+
class Log(object):
def __init__(self, to_file: bool, level: str, location: str):
+ self._hooks = []
+
logging.addLevelName(LEVELS["trace"], "TRACE")
self.logger = logging.getLogger(__name__)
@@ -33,6 +43,11 @@ class Log(object):
stdout_handler.setFormatter(formatter)
self.logger.addHandler(stdout_handler)
+ test_handler = HookedHandler(self._on_log)
+ test_handler.setLevel(LEVELS["debug"])
+ test_handler.setFormatter(formatter)
+ self.logger.addHandler(test_handler)
+
if to_file:
trace_path = os.path.join(location, "trace.log")
trace_handler = logging.handlers.TimedRotatingFileHandler(
@@ -54,6 +69,12 @@ class Log(object):
warn_handler.setFormatter(formatter)
self.logger.addHandler(warn_handler)
+ def hook(self, func: typing.Callable[[int, str], None]):
+ self._hooks.append(func)
+ def _on_log(self, levelno, line):
+ for func in self._hooks:
+ func(levelno, line)
+
def trace(self, message: str, params: typing.List=None, **kwargs):
self._log(message, params, LEVELS["trace"], kwargs)
def debug(self, message: str, params: typing.List=None, **kwargs):