From 7e79bcd4ab0030db5c5a7998c81f63c48656be80 Mon Sep 17 00:00:00 2001 From: Guido Günther Date: Fri, 3 Sep 2010 13:07:10 +0200 Subject: Add logging functions This allows us to color and prefix the output. Closes: #544332 --- gbp/log.py | 110 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 110 insertions(+) create mode 100644 gbp/log.py (limited to 'gbp/log.py') diff --git a/gbp/log.py b/gbp/log.py new file mode 100644 index 0000000..bf8a3e3 --- /dev/null +++ b/gbp/log.py @@ -0,0 +1,110 @@ +# vim: set fileencoding=utf-8 : +# +# (C) 2010 Guido Guenther +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +"""Simple colored logging classes""" + +import sys + +logger = None + +class Logger(object): + + DEBUG, INFO, WARNING, ERROR = range(4) + + COLOR_NONE = 0 + COLOR_BLACK, COLOR_RED, COLOR_GREEN = range(30,33) + + COLOR_SEQ = "\033[%dm" + BOLD_SEQ = "\033[1m" + + + format = ("%(color)s" + "gbp:%(levelname)s: " + "%(message)s" + "%(coloroff)s") + + def __init__(self): + self.levels = { self.DEBUG: [ 'debug', self.COLOR_GREEN ], + self.INFO: [ 'info', self.COLOR_GREEN ], + self.WARNING: [ 'warn', self.COLOR_RED ], + self.ERROR: [ 'error', self.COLOR_RED ], } + self.color = False + self.level = self.INFO + + def set_level(self, level): + self.level = level + + def set_color(self, color): + if type(color) == type(True): + self.color = color + else: + if color.lower() == "on": + self.color = True + elif color.lower() == "auto": + if (sys.stderr.isatty() and + sys.stdout.isatty()): + self.color = True + else: + self.color = False + + if self.color: + self.get_color = self._color + self.get_coloroff = self._color_off + else: + self.get_color = self.get_coloroff = self._color_dummy + + def _color_dummy(self, level=None): + return "" + + def _color(self, level): + return self.COLOR_SEQ % (self.levels[level][1]) + + def _color_off(self): + return self.COLOR_SEQ % self.COLOR_NONE + + + def log(self, level, message): + if level < self.level: + return + + out = [sys.stdout, sys.stderr][level >= self.WARNING] + print >>out, self.format % { 'levelname': self.levels[level][0], + 'color': self.get_color(level), + 'message': message, + 'coloroff': self.get_coloroff()} + + +def err(msg): + logger.log(Logger.ERROR, msg) + +def warn(msg): + logger.log(Logger.WARNING, msg) + +def info(msg): + logger.log(Logger.INFO, msg) + +def debug(msg): + logger.log(Logger.DEBUG, msg) + +def setup(color, verbose): + logger.set_color(color) + if verbose: + logger.set_level(Logger.DEBUG) + +if not logger: + logger = Logger() + -- cgit v1.2.3