""" Helpers for logging
-ShortLevelFormatter: provide a 4-char-sized field "levl" for messge urgency
-(dbug/info/warn/err /crit)
+ShortLevelFormatter: provide a 4-char-sized field "shortlevel" for message
+urgency (dbug/info/warn/err /crit)
Further ideas
class ShortLevelFormatter(Formatter):
"""
- Formatter for logging handlers that allows use of log format field "levl"
+ Formatter for logging handlers that allows use of format field "shortlevel"
using this formatter, you can specify in the log message format string the
- field "levl" which will introduce in your log messages a 4-char field for
- the log record urgency: "DEBUG" --> "dbug", "INFO" --> "info",
+ field "shortlevel" which will introduce in your log messages a 4-char field
+ for the log record urgency: "DEBUG" --> "dbug", "INFO" --> "info",
"WARNING" --> "warn", "ERROR" --> "err ", "CRITICAL" --> "crit"
All other functionality (like other format fields) is inherited from base
logger.setLevel(logging.DEBUG)
handler = logging.StreamHandler()
handler.setLevel(logging.DEBUG)
- formatter = ShortLevelFormatter('%(levl)s| %(msg)s')
+ formatter = ShortLevelFormatter('%(shortlevel)s| %(msg)s')
handler.setFormatter(formatter)
logger.addHandler(handler)
.. seealso:: testing funcion :py:func:`test_short_level_format`
"""
- def __init__(self, *args, **kwargs):
+ def __init__(self, fmt=DEFAULT_SHORT_LEVEL_FORMAT,
+ datefmt=DEFAULT_SHORT_LEVEL_DATE_FORMAT, *args, **kwargs):
""" creates a new ShortLevelFormatter
forwards all args to super class Formatter and initializes dict with
levelno and short string representations
"""
- self.supr = super(ShortLevelFormatter, self)
- self.supr.__init__(*args, **kwargs)
- self._levl_dict = {DEBUG: 'dbug', INFO: 'info', WARNING: 'warn',
- ERROR: 'err ', CRITICAL: 'crit', NOTSET: '----'}
+ self.parent = super(ShortLevelFormatter, self)
+ self.parent.__init__(fmt=fmt, datefmt=datefmt, *args, **kwargs)
+ self._shortlevel_dict = {DEBUG: 'dbug', INFO: 'info', WARNING: 'warn',
+ ERROR: 'err ', CRITICAL: 'crit',
+ NOTSET: '----'}
def format(self, record):
""" create string representation of given log record """
try:
- record.levl = self._levl_dict[record.levelno]
+ record.shortlevel = self._shortlevel_dict[record.levelno]
except KeyError:
- record.levl = '????'
+ record.shortlevel = '????'
- return self.supr.format(record)
+ return self.parent.format(record)
- def add_level(self, levelno, levl_str):
+ def add_level(self, levelno, shortlevel_str):
""" add a new message urgency level
:param int levelno: numeric urgency level
- :param str levl_str: string representation of message urgency; should
- be of length 4
+ :param str shortlevel_str: string representation of message urgency;
+ should be of length 4
:returns: nothing
"""
- self._levl_dict[levelno] = levl_str
+ self._shortlevel_dict[levelno] = shortlevel_str
def test_short_level_format():
""" quick test of :py:class:`ShortLevelFormatter` """
- import logging
logger = logging.getLogger('logtest')
logger.setLevel(DEBUG)
handler = logging.StreamHandler()
handler.setLevel(DEBUG)
- formatter = ShortLevelFormatter('%(asctime)s:%(msecs)03d %(levl)s| %(msg)s'
- ' [regular levelname=%(levelname)s]',
- datefmt='%H:%M:%S')
+ formatter = ShortLevelFormatter(
+ '%(asctime)s:%(msecs)03d %(shortlevel)s| %(msg)s'
+ ' [regular levelname=%(levelname)s]',
+ datefmt='%H:%M:%S')
handler.setFormatter(formatter)
logger.addHandler(handler)