Skip to content

Commit 8755833

Browse files
committed
Testing the exceptional case in metric handler failure.
1 parent f5a7f68 commit 8755833

File tree

1 file changed

+58
-0
lines changed

1 file changed

+58
-0
lines changed

tests/unit/test_logging_metrics.py

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,3 +99,61 @@ def test_root_logger_handler_increments_for_distinct_logger(metrics):
9999
finally:
100100
root_logger.removeHandler(handler)
101101
root_logger.setLevel(original_level)
102+
103+
104+
# --- Exception handling tests ---
105+
class DummyMetrics:
106+
def __init__(self):
107+
self.calls = 0
108+
109+
def increment(self, *_, **__):
110+
self.calls += 1
111+
raise RuntimeError("increment failed")
112+
113+
114+
class SpyMetricsLoggingHandler(MetricsLoggingHandler):
115+
def __init__(self, *args, **kwargs):
116+
super().__init__(*args, **kwargs)
117+
self.handled = []
118+
119+
def handleError(self, record): # noqa: N802 (match logging API)
120+
self.handled.append(record)
121+
122+
123+
def test_handler_handles_increment_exception_without_raising():
124+
logger = logging.getLogger("test_logger_exception")
125+
logger.setLevel(logging.DEBUG)
126+
logger.propagate = False
127+
128+
dummy_metrics = DummyMetrics()
129+
handler = SpyMetricsLoggingHandler(dummy_metrics)
130+
logger.addHandler(handler)
131+
132+
# Should not raise despite metrics increment failing
133+
logger.error("trigger exception in metrics")
134+
135+
assert len(handler.handled) == 1
136+
assert dummy_metrics.calls == 1
137+
138+
logger.removeHandler(handler)
139+
140+
141+
def test_root_logger_exception_handling_with_distinct_logger():
142+
root_logger = logging.getLogger()
143+
original_level = root_logger.level
144+
145+
dummy_metrics = DummyMetrics()
146+
handler = SpyMetricsLoggingHandler(dummy_metrics)
147+
148+
try:
149+
root_logger.setLevel(logging.DEBUG)
150+
root_logger.addHandler(handler)
151+
152+
distinct_logger = logging.getLogger("distinct.logger.exception")
153+
distinct_logger.info("trigger info path exception")
154+
155+
assert len(handler.handled) == 1
156+
assert dummy_metrics.calls == 1
157+
finally:
158+
root_logger.removeHandler(handler)
159+
root_logger.setLevel(original_level)

0 commit comments

Comments
 (0)