Ned Konz 2025-06-06 08:11:58 -07:00 zatwierdzone przez GitHub
commit 154a54644d
Nie znaleziono w bazie danych klucza dla tego podpisu
ID klucza GPG: B5690EEEBB952194
1 zmienionych plików z 39 dodań i 6 usunięć

Wyświetl plik

@ -25,6 +25,7 @@ _loggers = {}
_stream = sys.stderr
_default_fmt = "%(levelname)s:%(name)s:%(message)s"
_default_datefmt = "%Y-%m-%d %H:%M:%S"
_default_formatter = None
class LogRecord:
@ -43,9 +44,19 @@ class Handler:
self.level = level
self.formatter = None
@staticmethod
def _default_formatter():
global _default_formatter
if _default_formatter is None:
_default_formatter = Formatter()
return _default_formatter
def close(self):
pass
def flush(self):
pass
def setLevel(self, level):
self.level = level
@ -53,7 +64,11 @@ class Handler:
self.formatter = formatter
def format(self, record):
return self.formatter.format(record)
if self.formatter:
fmt = self.formatter
else:
fmt = self._default_formatter()
return fmt.format(record)
class StreamHandler(Handler):
@ -62,7 +77,7 @@ class StreamHandler(Handler):
self.stream = _stream if stream is None else stream
self.terminator = "\n"
def close(self):
def flush(self):
if hasattr(self.stream, "flush"):
self.stream.flush()
@ -129,7 +144,7 @@ class Logger:
msg = msg % args
self.record.set(self.name, level, msg)
handlers = self.handlers
if not handlers:
if not self.hasHandlers():
handlers = getLogger().handlers
for h in handlers:
h.emit(self.record)
@ -162,7 +177,13 @@ class Logger:
self.log(ERROR, buf.getvalue())
def addHandler(self, handler):
self.handlers.append(handler)
if handler not in self.handlers:
self.handlers.append(handler)
def removeHandler(self, handler):
if handler in self.handlers:
handler.close()
self.handlers.remove(handler)
def hasHandlers(self):
return len(self.handlers) > 0
@ -226,17 +247,28 @@ def basicConfig(
stream=None,
encoding="UTF-8",
force=False,
handlers=None,
):
if "root" not in _loggers:
_loggers["root"] = Logger("root")
logger = _loggers["root"]
if force or not logger.handlers:
if force:
for h in logger.handlers:
h.close()
logger.handlers = []
if len([arg for arg in (filename, stream, handlers) if arg is not None]) > 1:
raise ValueError("can only set one of 'filename', 'stream' or 'handlers'")
if handlers is not None:
for h in handlers:
if h.formatter is None:
h.setFormatter(Formatter(format, datefmt))
logger.addHandler(h)
if not logger.hasHandlers():
if filename is None:
handler = StreamHandler(stream)
else:
@ -245,9 +277,10 @@ def basicConfig(
handler.setLevel(level)
handler.setFormatter(Formatter(format, datefmt))
logger.setLevel(level)
logger.addHandler(handler)
logger.setLevel(level)
if hasattr(sys, "atexit"):
sys.atexit(shutdown)