kopia lustrzana https://github.com/micropython/micropython-lib
129 wiersze
2.7 KiB
Python
129 wiersze
2.7 KiB
Python
import sys
|
|
|
|
CRITICAL = 50
|
|
ERROR = 40
|
|
WARNING = 30
|
|
INFO = 20
|
|
DEBUG = 10
|
|
NOTSET = 0
|
|
|
|
_level_dict = {
|
|
CRITICAL: "CRIT",
|
|
ERROR: "ERROR",
|
|
WARNING: "WARN",
|
|
INFO: "INFO",
|
|
DEBUG: "DEBUG",
|
|
}
|
|
|
|
_stream = sys.stderr
|
|
|
|
|
|
class LogRecord:
|
|
def __init__(self):
|
|
self.__dict__ = {}
|
|
|
|
def __getattr__(self, key):
|
|
return self.__dict__[key]
|
|
|
|
|
|
class Handler:
|
|
def __init__(self):
|
|
pass
|
|
|
|
def setFormatter(self, fmtr):
|
|
pass
|
|
|
|
|
|
class Logger:
|
|
|
|
level = NOTSET
|
|
handlers = []
|
|
record = LogRecord()
|
|
|
|
def __init__(self, name):
|
|
self.name = name
|
|
|
|
def _level_str(self, level):
|
|
l = _level_dict.get(level)
|
|
if l is not None:
|
|
return l
|
|
return "LVL%s" % level
|
|
|
|
def setLevel(self, level):
|
|
self.level = level
|
|
|
|
def isEnabledFor(self, level):
|
|
return level >= (self.level or _level)
|
|
|
|
def log(self, level, msg, *args):
|
|
if self.isEnabledFor(level):
|
|
levelname = self._level_str(level)
|
|
if args:
|
|
msg = msg % args
|
|
if self.handlers:
|
|
d = self.record.__dict__
|
|
d["levelname"] = levelname
|
|
d["levelno"] = level
|
|
d["message"] = msg
|
|
d["name"] = self.name
|
|
for h in self.handlers:
|
|
h.emit(self.record)
|
|
else:
|
|
print(levelname, ":", self.name, ":", msg, sep="", file=_stream)
|
|
|
|
def debug(self, msg, *args):
|
|
self.log(DEBUG, msg, *args)
|
|
|
|
def info(self, msg, *args):
|
|
self.log(INFO, msg, *args)
|
|
|
|
def warning(self, msg, *args):
|
|
self.log(WARNING, msg, *args)
|
|
|
|
def error(self, msg, *args):
|
|
self.log(ERROR, msg, *args)
|
|
|
|
def critical(self, msg, *args):
|
|
self.log(CRITICAL, msg, *args)
|
|
|
|
def exc(self, e, msg, *args):
|
|
self.log(ERROR, msg, *args)
|
|
sys.print_exception(e, _stream)
|
|
|
|
def exception(self, msg, *args):
|
|
self.exc(sys.exc_info()[1], msg, *args)
|
|
|
|
def addHandler(self, hndlr):
|
|
self.handlers.append(hndlr)
|
|
|
|
|
|
_level = INFO
|
|
_loggers = {}
|
|
|
|
|
|
def getLogger(name="root"):
|
|
if name in _loggers:
|
|
return _loggers[name]
|
|
l = Logger(name)
|
|
_loggers[name] = l
|
|
return l
|
|
|
|
|
|
def info(msg, *args):
|
|
getLogger().info(msg, *args)
|
|
|
|
|
|
def debug(msg, *args):
|
|
getLogger().debug(msg, *args)
|
|
|
|
|
|
def basicConfig(level=INFO, filename=None, stream=None, format=None):
|
|
global _level, _stream
|
|
_level = level
|
|
if stream:
|
|
_stream = stream
|
|
if filename is not None:
|
|
print("logging.basicConfig: filename arg is not supported")
|
|
if format is not None:
|
|
print("logging.basicConfig: format arg is not supported")
|