]> kaliko git repositories - mpd-sima.git/blobdiff - sima/lib/logger.py
Cleanup PlayerError exception wrapper
[mpd-sima.git] / sima / lib / logger.py
index bde62d7f83b01cd1ca07e2a70112284808712191..fae726dfd2253190bcbca52d3c8aaa5174cfda7c 100644 (file)
@@ -1,6 +1,5 @@
 # -*- coding: utf-8 -*-
-
-# Copyright (c) 2009, 2010, 2013 Jack Kaliko <kaliko@azylum.org>
+# Copyright (c) 2009, 2010, 2013, 2014, 2015, 2021 kaliko <kaliko@azylum.org>
 #
 #  This file is part of sima
 #
@@ -27,71 +26,83 @@ Logging facility for sima.
 import logging
 import sys
 
+from os import getenv
 
+DEBUG = logging.DEBUG
+INFO = logging.INFO
+ERROR = logging.ERROR
 LOG_FORMATS = {
-        #logging.DEBUG: '{asctime} {filename}:{lineno}({funcName}) '
-                                 #'{levelname}: {message}',
-        logging.DEBUG:  '{asctime} {filename}:{lineno}  {levelname}: {message}',
-        logging.INFO:  '{asctime} {levelname}: {message}',
+        DEBUG: '[{process}]{filename: >12}:{lineno: <3} {levelname: <7}: {message}',
+        INFO:  '{levelname: <7}: {message}',
         }
 DATE_FMT = "%Y-%m-%d %H:%M:%S"
 
+TRACE_LEVEL_NUM = 5
+logging.addLevelName(TRACE_LEVEL_NUM, 'TRACE')
+def trace(self, message, *args, **kwargs):
+    # Yes, logger takes its '*args' as 'args'.
+    if self.isEnabledFor(TRACE_LEVEL_NUM):
+        self._log(TRACE_LEVEL_NUM, message, args, **kwargs)
 
-class LevelFilter(logging.Filter):# Logging facility
-    """
-    Enable logging between two log level by filtering everything < level.
-    """
-
-    def __init__(self, filt_level):
-        logging.Filter.__init__(self)
-        self.level = filt_level
-
-    def filter(self, record):
-        """Defines loglevel"""
-        return record.levelno <= self.level
+logging.Logger.trace = trace
 
 
-def set_logger(level='info', logfile=None, name='sima'):
+def set_logger(level='info', logfile=None):
     """
     logger:
         level: in debug, info, warning,…
-        file: provides to log to file
-
+        logfile: file to log to
     """
-    user_log_level = getattr(logging, level.upper())
-    if user_log_level > logging.DEBUG:
-        log_format = LOG_FORMATS.get(logging.INFO)
+    name = 'sima'
+    if getenv('TRACE', None):
+        user_log_level = TRACE_LEVEL_NUM
     else:
-        log_format = LOG_FORMATS.get(logging.DEBUG)
-    logg = logging.getLogger(name)
+        user_log_level = getattr(logging, level.upper())
+    if user_log_level > DEBUG:
+        log_format = LOG_FORMATS.get(INFO)
+    else:
+        log_format = LOG_FORMATS.get(DEBUG)
+    logger = logging.getLogger(name)
     formatter = logging.Formatter(log_format, DATE_FMT, '{')
-    logg.setLevel(user_log_level)
+    logger.setLevel(user_log_level)
+    filehdl = False
+    if logger.handlers:
+        for hdl in logger.handlers:
+            hdl.setFormatter(formatter)
+            if isinstance(hdl, logging.FileHandler):
+                filehdl = True
+            else:
+                logger.removeHandler(hdl)
+
     if logfile:
+        if filehdl:
+            logger.handlers = []
+        # Add timestamp for file handler
+        log_format = f'{{asctime}} {log_format}'
+        formatter = logging.Formatter(log_format, DATE_FMT, '{')
         # create file handler
         fileh = logging.FileHandler(logfile)
-        #fileh.setLevel(user_log_level)
         fileh.setFormatter(formatter)
-        if not logg.hasHandlers():
-            logg.addHandler(fileh)
+        logger.addHandler(fileh)
     else:
-        if not logg.hasHandlers():
-            # create console handler with a specified log level (STDOUT)
-            couth = logging.StreamHandler(sys.stdout)
-            #couth.setLevel(user_log_level)
-            couth.addFilter(LevelFilter(logging.WARNING))
+        if filehdl:
+            logger.info('Not changing logging handlers, only updating formatter')
+            return
+        # create console handler with a specified log level (STDOUT)
+        couth = logging.StreamHandler(sys.stdout)
+        couth.addFilter(lambda record: record.levelno < ERROR)
 
-            # create console handler with warning log level (STDERR)
-            cerrh = logging.StreamHandler(sys.stderr)
-        #cerrh.setLevel(logging.WARNING)
-        cerrh.setLevel(logging.ERROR)
+        # create console handler with warning log level (STDERR)
+        cerrh = logging.StreamHandler(sys.stderr)
+        cerrh.setLevel(ERROR)
 
         # add formatter to the handlers
         cerrh.setFormatter(formatter)
         couth.setFormatter(formatter)
 
         # add the handlers to SIMA_LOGGER
-        logg.addHandler(couth)
-        logg.addHandler(cerrh)
+        logger.addHandler(couth)
+        logger.addHandler(cerrh)  # Already added creating the handler‽ Still have to figure it out.
 
 # VIM MODLINE
 # vim: ai ts=4 sw=4 sts=4 expandtab