126 lines
3.1 KiB
Python
126 lines
3.1 KiB
Python
|
# -*- python -*-
|
||
|
#
|
||
|
# This file is part of easydev software
|
||
|
#
|
||
|
# Copyright (c) 2012-2014
|
||
|
#
|
||
|
# File author(s): Thomas Cokelaer <cokelaer@gmail.com>
|
||
|
#
|
||
|
# Distributed under the GPLv3 License.
|
||
|
# See accompanying file LICENSE.txt or copy at
|
||
|
# http://www.gnu.org/licenses/gpl-3.0.html
|
||
|
#
|
||
|
# Website: https://github.com/cokelaer/easydev
|
||
|
#
|
||
|
##############################################################################
|
||
|
# import logging
|
||
|
import colorlog
|
||
|
|
||
|
__all__ = ["Logging"]
|
||
|
|
||
|
|
||
|
colors = {
|
||
|
"DEBUG": "cyan",
|
||
|
"INFO": "green",
|
||
|
"WARNING": "yellow",
|
||
|
"ERROR": "red",
|
||
|
"CRITICAL": "bold_red",
|
||
|
}
|
||
|
|
||
|
|
||
|
class Logging(object):
|
||
|
"""logging utility.
|
||
|
|
||
|
::
|
||
|
|
||
|
>>> l = Logging("root", "INFO")
|
||
|
>>> l.info("test")
|
||
|
INFO:root:test
|
||
|
>>> l.level = "WARNING"
|
||
|
>>> l.info("test")
|
||
|
|
||
|
"""
|
||
|
|
||
|
def __init__(self, name="root", level="WARNING", text_color="blue"):
|
||
|
self._name = name
|
||
|
self.formatter = colorlog.ColoredFormatter(
|
||
|
"%(log_color)s%(levelname)-8s[%(name)s:%(lineno)d]: %(reset)s %({})s%(message)s".format(
|
||
|
text_color
|
||
|
),
|
||
|
datefmt=None,
|
||
|
reset=True,
|
||
|
log_colors=colors,
|
||
|
secondary_log_colors={},
|
||
|
style="%",
|
||
|
)
|
||
|
self._set_name(name)
|
||
|
|
||
|
logger = colorlog.getLogger(self._name)
|
||
|
handler = colorlog.StreamHandler()
|
||
|
handler.setFormatter(self.formatter)
|
||
|
logger.addHandler(handler)
|
||
|
|
||
|
def _set_name(self, name):
|
||
|
level = self.level
|
||
|
self._name = name
|
||
|
logger = colorlog.getLogger(self._name)
|
||
|
if level == 0:
|
||
|
self._set_level("WARNING")
|
||
|
else:
|
||
|
self._set_level(level)
|
||
|
|
||
|
def _get_name(self):
|
||
|
return self._name
|
||
|
|
||
|
name = property(_get_name, _set_name)
|
||
|
|
||
|
def _set_level(self, level):
|
||
|
if isinstance(level, bool):
|
||
|
if level is True:
|
||
|
level = "INFO"
|
||
|
if level is False:
|
||
|
level = "ERROR"
|
||
|
if level == 10:
|
||
|
level = "DEBUG"
|
||
|
if level == 20:
|
||
|
level = "INFO"
|
||
|
if level == 30:
|
||
|
level = "WARNING"
|
||
|
if level == 40:
|
||
|
level = "ERROR"
|
||
|
if level == 50:
|
||
|
level = "CRITICAL"
|
||
|
colorlog.getLogger(self.name).setLevel(level)
|
||
|
|
||
|
def _get_level(self):
|
||
|
level = colorlog.getLogger(self.name).level
|
||
|
if level == 10:
|
||
|
return "DEBUG"
|
||
|
elif level == 20:
|
||
|
return "INFO"
|
||
|
elif level == 30:
|
||
|
return "WARNING"
|
||
|
elif level == 40:
|
||
|
return "ERROR"
|
||
|
elif level == 50:
|
||
|
return "CRITICAL"
|
||
|
else:
|
||
|
return level
|
||
|
|
||
|
level = property(_get_level, _set_level)
|
||
|
|
||
|
def debug(self, msg):
|
||
|
colorlog.getLogger(self.name).debug(msg)
|
||
|
|
||
|
def info(self, msg):
|
||
|
colorlog.getLogger(self.name).info(msg)
|
||
|
|
||
|
def warning(self, msg):
|
||
|
colorlog.getLogger(self.name).warning(msg)
|
||
|
|
||
|
def critical(self, msg):
|
||
|
colorlog.getLogger(self.name).critical(msg)
|
||
|
|
||
|
def error(self, msg):
|
||
|
colorlog.getLogger(self.name).error(msg)
|