Skip to content

Commit f99f1cf

Browse files
fix: conditionally set exc_info in AppLogger.error based on active exception context
Agent-Logs-Url: https://github.com/microsoft/Modernize-your-code-solution-accelerator/sessions/9a6c2020-0f93-4936-bc01-9d333c0444b2 Co-authored-by: Abdul-Microsoft <192570837+Abdul-Microsoft@users.noreply.github.com>
1 parent d41ad7d commit f99f1cf

2 files changed

Lines changed: 36 additions & 1 deletion

File tree

src/backend/common/logger/app_logger.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import json
22
import logging
3+
import sys
34
from typing import Any
45

56

@@ -43,7 +44,9 @@ def info(self, message: Any, **kwargs) -> None:
4344
def warning(self, message: Any, **kwargs) -> None:
4445
self.logger.warning(self._format_message(message, **kwargs))
4546

46-
def error(self, message: Any, exc_info=True, **kwargs) -> None:
47+
def error(self, message: Any, exc_info=None, **kwargs) -> None:
48+
if exc_info is None:
49+
exc_info = sys.exc_info()[0] is not None
4750
self.logger.error(self._format_message(message, **kwargs), exc_info=exc_info)
4851

4952
def critical(self, message: Any, **kwargs) -> None:

src/tests/backend/common/logger/app_logger_test.py

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,38 @@ def test_error_log(logger_instance):
7676
log_json = json.loads(mock_error.call_args[0][0])
7777
assert log_json["message"] == "Error log"
7878
assert log_json["context"]["error_code"] == 500
79+
# Called outside an exception context, so exc_info should be False
80+
assert mock_error.call_args[1]["exc_info"] is False
81+
82+
83+
def test_error_log_with_active_exception(logger_instance):
84+
with patch.object(logger_instance.logger, "error") as mock_error:
85+
try:
86+
raise ValueError("test error")
87+
except ValueError:
88+
logger_instance.error("Error log inside exception")
89+
mock_error.assert_called_once()
90+
# Called inside an exception context, so exc_info should be True
91+
assert mock_error.call_args[1]["exc_info"] is True
92+
93+
94+
def test_error_log_without_active_exception(logger_instance):
95+
with patch.object(logger_instance.logger, "error") as mock_error:
96+
logger_instance.error("Error log outside exception")
97+
mock_error.assert_called_once()
98+
# Called outside an exception context, so exc_info should be False
99+
assert mock_error.call_args[1]["exc_info"] is False
100+
101+
102+
def test_error_log_explicit_exc_info_override(logger_instance):
103+
with patch.object(logger_instance.logger, "error") as mock_error:
104+
try:
105+
raise ValueError("test error")
106+
except ValueError:
107+
logger_instance.error("Suppressed traceback", exc_info=False)
108+
mock_error.assert_called_once()
109+
# Explicit exc_info=False should override auto-detection even inside an exception context
110+
assert mock_error.call_args[1]["exc_info"] is False
79111

80112

81113
def test_critical_log(logger_instance):

0 commit comments

Comments
 (0)