Source code for xtd.core.logger.formatter
# -*- coding: utf-8
#------------------------------------------------------------------#
__author__ = "Xavier MARCELET <xavier@marcelet.com>"
#------------------------------------------------------------------#
import sys
import logging
import termcolor
#------------------------------------------------------------------#
[docs]class LocationFormatter(logging.Formatter):
[docs] def __init__(self,
fmt = "%(asctime)s (%(name)s) [%(levelname)s] : %(message)s %(location)s",
datefmt = "%Y-%m-%d %H:%M:%S",
locfmt = "at %(pathname)s:%(lineno)s -> %(funcName)s",
locstyle = None):
super(LocationFormatter, self).__init__(fmt, datefmt)
self.m_fmt = fmt
self.m_locFmt = locfmt
self.m_datefmt = datefmt
self.m_locstyle = locstyle
if locstyle is None:
self.m_locstyle = { "colors" : [], "attrs" : [] }
def _get_loc(self, p_record):
l_loc = self.m_locFmt % { x : getattr(p_record, x) for x in dir(p_record) if x[0] != "_" }
l_args = {}
l_colors = self.m_locstyle.get("colors", [])
l_attrs = self.m_locstyle.get("attrs", [])
if not isinstance(l_colors, list):
l_colors = [ l_colors ]
if not isinstance(l_attrs, list):
l_attrs = [ l_attrs ]
l_args["attrs"] = l_attrs
for c_arg in l_colors:
if c_arg[0:3] == "on_":
l_args["on_color"] = c_arg
else:
l_args["color"] = c_arg
return termcolor.colored(l_loc, **l_args)
[docs] def format(self, p_record):
l_loc = self._get_loc(p_record)
if sys.version_info[0] >= 3:
#pylint: disable=no-member,protected-access
self._style._fmt = self.m_fmt.replace("%(location)s", l_loc)
else:
#pylint: disable=no-member,protected-access
self._fmt = self.m_fmt.replace("%(location)s", l_loc)
return super(LocationFormatter, self).format(p_record)