From 8f0a9633572f881a87fe472dff27c13afcf30006 Mon Sep 17 00:00:00 2001 From: Jaden Fix Date: Sun, 18 Oct 2026 05:30:13 -0700 Subject: [PATCH] Handle basicConfig calls that create no handlers --- colorlog/tests/test_wrappers.py | 18 ++++++++++++++++++ colorlog/wrappers.py | 2 ++ 2 files changed, 20 insertions(+) diff --git a/colorlog/tests/test_wrappers.py b/colorlog/tests/test_wrappers.py index e339ebd..7ebee91 100644 --- a/colorlog/tests/test_wrappers.py +++ b/colorlog/tests/test_wrappers.py @@ -1,5 +1,6 @@ """Test the colorlog.wrappers module.""" +import io import logging import colorlog @@ -41,3 +42,20 @@ def test_wrappers(): assert colorlog.critical is not logging.critical assert colorlog.log is not logging.log assert colorlog.exception is not logging.exception + + +def test_basicConfig_with_no_handlers(monkeypatch): + monkeypatch.setattr(logging.root, "handlers", []) + colorlog.basicConfig(handlers=[]) + assert logging.root.handlers == [] + + +def test_basicConfig_with_supplied_handler(monkeypatch): + monkeypatch.setattr(logging.root, "handlers", []) + stream = io.StringIO() + handler = logging.StreamHandler(stream) + colorlog.basicConfig(handlers=[handler], format="%(message)s", reset=False) + assert logging.root.handlers == [handler] + assert isinstance(handler.formatter, colorlog.ColoredFormatter) + logging.root.warning("configured message") + assert stream.getvalue() == "configured message\n" diff --git a/colorlog/wrappers.py b/colorlog/wrappers.py index e05756f..34b4473 100644 --- a/colorlog/wrappers.py +++ b/colorlog/wrappers.py @@ -56,6 +56,8 @@ def basicConfig( logging.basicConfig(**kwargs) def _basicConfig(): + if not logging.root.handlers: + return handler = logging.root.handlers[0] handler.setFormatter( colorlog.formatter.ColoredFormatter(