X-Git-Url: https://git.kaliko.me/?a=blobdiff_plain;f=sima%2Flib%2Flogger.py;h=fae726dfd2253190bcbca52d3c8aaa5174cfda7c;hb=HEAD;hp=ebe6c27142946932dfa23fd4826634eb61e37c8b;hpb=cf5fee72c57cf6b6f09b9caa78ab9e547f1d7542;p=mpd-sima.git diff --git a/sima/lib/logger.py b/sima/lib/logger.py index ebe6c27..fae726d 100644 --- a/sima/lib/logger.py +++ b/sima/lib/logger.py @@ -1,6 +1,5 @@ # -*- coding: utf-8 -*- - -# Copyright (c) 2009, 2010, 2013 Jack Kaliko +# Copyright (c) 2009, 2010, 2013, 2014, 2015, 2021 kaliko # # This file is part of sima # @@ -27,69 +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) - logg.addHandler(fileh) + logger.addHandler(fileh) else: + 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.setLevel(user_log_level) - couth.addFilter(LevelFilter(logging.WARNING)) + 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) + 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