Skip to content

Commit 54ad091

Browse files
committed
match CPython behavior w.r.t. default (last resort) logger
1 parent 01359e7 commit 54ad091

File tree

2 files changed

+35
-11
lines changed

2 files changed

+35
-11
lines changed

adafruit_logging.py

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -246,13 +246,13 @@ def emit(self, record: LogRecord) -> None:
246246

247247

248248
logger_cache = {}
249+
_default_handler = StreamHandler()
249250

250251

251252
def _addLogger(logger_name: Hashable) -> None:
252253
"""Adds the logger if it doesn't already exist"""
253254
if logger_name not in logger_cache:
254255
new_logger = Logger(logger_name)
255-
new_logger.addHandler(StreamHandler())
256256
logger_cache[logger_name] = new_logger
257257

258258

@@ -330,15 +330,30 @@ def handle(self, record: LogRecord) -> None:
330330
331331
:param LogRecord record: log record
332332
"""
333-
if not self.hasHandlers() and not self.emittedNoHandlerWarning:
334-
sys.stderr.write(f"Logger '{self.name}' has no handlers\n")
333+
if (
334+
_default_handler is None
335+
and not self.hasHandlers()
336+
and not self.emittedNoHandlerWarning
337+
):
338+
sys.stderr.write(
339+
f"Logger '{self.name}' has no handlers and default handler is None\n"
340+
)
335341
self.emittedNoHandlerWarning = True
336342
return
337343

344+
emitted = False
338345
if record.levelno >= self._level:
339346
for handler in self._handlers:
340347
if record.levelno >= handler.level:
341348
handler.emit(record)
349+
emitted = True
350+
351+
if (
352+
not emitted
353+
and _default_handler
354+
and record.levelno >= _default_handler.level
355+
):
356+
_default_handler.emit(record)
342357

343358
def log(self, level: int, msg: str, *args) -> None:
344359
"""Log a message.

examples/logging_simpletest.py

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -8,22 +8,31 @@
88

99
import adafruit_logging as logging
1010

11-
# This should produce an error output
11+
# This should produce an info output via default handler.
12+
13+
logger_default_handler = logging.getLogger("default_handler")
14+
logger_default_handler.setLevel(logging.INFO)
15+
logger_default_handler.info("Default handler: Info message")
16+
assert not logger_default_handler.hasHandlers()
17+
18+
# This should produce an error output via Stream Handler.
1219

1320
logger = logging.getLogger("test")
14-
print_logger = logging.StreamHandler()
15-
logger.addHandler(print_logger)
21+
print_handler = logging.StreamHandler()
22+
logger.addHandler(print_handler)
23+
assert logger.hasHandlers()
1624

1725
logger.setLevel(logging.ERROR)
18-
logger.info("Info message")
19-
logger.error("Error message")
26+
logger.info("Stream Handler: Info message")
27+
logger.error("Stream Handler: Error message")
2028

21-
# This should produce no output
29+
# This should produce no output at all.
2230

2331
null_logger = logging.getLogger("null")
2432
null_handler = logging.NullHandler()
2533
null_logger.addHandler(null_handler)
34+
assert null_logger.hasHandlers()
2635

2736
null_logger.setLevel(logging.ERROR)
28-
null_logger.info("Info message")
29-
null_logger.error("Error message")
37+
null_logger.info("Null Handler: Info message")
38+
null_logger.error("Null Handler: Error message")

0 commit comments

Comments
 (0)