summaryrefslogtreecommitdiff
path: root/pecan/log.py
diff options
context:
space:
mode:
Diffstat (limited to 'pecan/log.py')
-rw-r--r--pecan/log.py54
1 files changed, 54 insertions, 0 deletions
diff --git a/pecan/log.py b/pecan/log.py
new file mode 100644
index 0000000..133fdf5
--- /dev/null
+++ b/pecan/log.py
@@ -0,0 +1,54 @@
+import logging
+
+from logutils.colorize import ColorizingStreamHandler
+
+
+class DefaultColorizer(ColorizingStreamHandler):
+
+ level_map = {
+ logging.DEBUG: (None, 'blue', True),
+ logging.INFO: (None, None, True),
+ logging.WARNING: (None, 'yellow', True),
+ logging.ERROR: (None, 'red', True),
+ logging.CRITICAL: (None, 'red', True),
+ }
+
+
+class ColorFormatter(logging.Formatter):
+ """
+ A very basic logging formatter that not only applies color to the
+ levels of the ouput but can also add padding to the the level names so that
+ they do not alter the visuals of logging when presented on the terminal.
+
+ The padding is provided by a convenient keyword that adds padding to the
+ ``levelname`` so that log output is easier to follow::
+
+ %(padded_color_levelname)s
+
+ Which would result in log level output that looks like::
+
+ [INFO ]
+ [WARNING ]
+ [ERROR ]
+ [DEBUG ]
+ [CRITICAL]
+
+ If colored output is not supported, it falls back to non-colored output
+ without any extra settings.
+ """
+
+ def __init__(self, _logging=None, colorizer=None, *a, **kw):
+ self.logging = _logging or logging
+ self.color = colorizer or DefaultColorizer()
+ logging.Formatter.__init__(self, *a, **kw)
+
+ def format(self, record):
+ levelname = record.levelname
+ padded_level = '%-8s' % levelname
+
+ record.color_levelname = self.color.colorize(levelname, record)
+ record.padded_color_levelname = self.color.colorize(
+ padded_level,
+ record
+ )
+ return self.logging.Formatter.format(self, record)