diff --git a/python-stdlib/logging/logging.py b/python-stdlib/logging/logging.py index f4874df7d..3c2dbfda6 100644 --- a/python-stdlib/logging/logging.py +++ b/python-stdlib/logging/logging.py @@ -28,7 +28,7 @@ class LogRecord: - def set(self, name, level, message): + def __init__(self, name, level, message, extra=None): self.name = name self.levelno = level self.levelname = _level_dict[level] @@ -36,6 +36,11 @@ def set(self, name, level, message): self.ct = time.time() self.msecs = int((self.ct - int(self.ct)) * 1000) self.asctime = None + if extra is not None: + for key in extra: + if (key in ["message", "asctime"]) or (key in self.__dict__): + raise KeyError("Attempt to overwrite %r in LogRecord" % key) + setattr(self, key, extra[key]) class Handler: @@ -110,7 +115,6 @@ def __init__(self, name, level=NOTSET): self.name = name self.level = level self.handlers = [] - self.record = LogRecord() def setLevel(self, level): self.level = level @@ -121,36 +125,19 @@ def isEnabledFor(self, level): def getEffectiveLevel(self): return self.level or getLogger().level or _DEFAULT_LEVEL - def log(self, level, msg, *args): + def log(self, level, msg, *args, exc_info=False, extra=None): if self.isEnabledFor(level): if args: if isinstance(args[0], dict): args = args[0] msg = msg % args - self.record.set(self.name, level, msg) + record = LogRecord(self.name, level, msg, extra) handlers = self.handlers if not handlers: handlers = getLogger().handlers for h in handlers: - h.emit(self.record) + h.emit(record) - 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 exception(self, msg, *args, exc_info=True): - self.log(ERROR, msg, *args) tb = None if isinstance(exc_info, BaseException): tb = exc_info @@ -161,6 +148,24 @@ def exception(self, msg, *args, exc_info=True): sys.print_exception(tb, buf) self.log(ERROR, buf.getvalue()) + def debug(self, msg, *args, **kwargs): + self.log(DEBUG, msg, *args, **kwargs) + + def info(self, msg, *args, **kwargs): + self.log(INFO, msg, *args, **kwargs) + + def warning(self, msg, *args, **kwargs): + self.log(WARNING, msg, *args, **kwargs) + + def error(self, msg, *args, **kwargs): + self.log(ERROR, msg, *args, **kwargs) + + def critical(self, msg, *args, **kwargs): + self.log(CRITICAL, msg, *args, **kwargs) + + def exception(self, msg, *args, **kwargs): + self.log(ERROR, msg, *args, **kwargs) + def addHandler(self, handler): self.handlers.append(handler) @@ -178,32 +183,32 @@ def getLogger(name=None): return _loggers[name] -def log(level, msg, *args): - getLogger().log(level, msg, *args) +def log(level, msg, *args, **kwargs): + getLogger().log(level, msg, *args, **kwarg) -def debug(msg, *args): - getLogger().debug(msg, *args) +def debug(msg, *args, **kwargs): + getLogger().debug(msg, *args, **kwargs) -def info(msg, *args): - getLogger().info(msg, *args) +def info(msg, *args, **kwargs): + getLogger().info(msg, *args, **kwargs) -def warning(msg, *args): - getLogger().warning(msg, *args) +def warning(msg, *args, **kwargs): + getLogger().warning(msg, *args, **kwargs) -def error(msg, *args): - getLogger().error(msg, *args) +def error(msg, *args, **kwargs): + getLogger().error(msg, *args, **kwargs) -def critical(msg, *args): - getLogger().critical(msg, *args) +def critical(msg, *args, **kwargs): + getLogger().critical(msg, *args, **kwargs) -def exception(msg, *args): - getLogger().exception(msg, *args) +def exception(msg, *args, **kwargs): + getLogger().exception(msg, *args, *kwargs) def shutdown():