Skip to content

Commit 05dbd23

Browse files
fix(log_level): update fetching loglevel with stanza (#364)
Allow developers to pass their logging stanza name while getting the log level via `conf_manager.py`.
1 parent c14f990 commit 05dbd23

File tree

2 files changed

+60
-1
lines changed

2 files changed

+60
-1
lines changed

solnlib/conf_manager.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -506,6 +506,7 @@ def get_log_level(
506506
session_key: str,
507507
app_name: str,
508508
conf_name: str,
509+
log_stanza: str = "logging",
509510
log_level_field: str = "loglevel",
510511
default_log_level: str = "INFO",
511512
) -> str:
@@ -517,6 +518,7 @@ def get_log_level(
517518
session_key: Splunk access token.
518519
app_name: Add-on name.
519520
conf_name: Configuration file name where logging stanza is.
521+
log_stanza: Logging stanza to define `log_level_field` and its value.
520522
log_level_field: Logging level field name under logging stanza.
521523
default_log_level: Default log level to return in case of errors.
522524
@@ -547,7 +549,7 @@ def get_log_level(
547549
)
548550
return default_log_level
549551
try:
550-
logging_details = conf.get("logging")
552+
logging_details = conf.get(log_stanza)
551553
return logging_details.get(log_level_field, default_log_level)
552554
except ConfStanzaNotExistException:
553555
logger.error(

tests/unit/test_conf_manager.py

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,3 +32,60 @@ def test_get_log_level_when_error_getting_conf(mock_conf_manager_class):
3232
)
3333

3434
assert expected_log_level == log_level
35+
36+
37+
@mock.patch.object(conf_manager, "ConfManager")
38+
def test_get_log_level_with_custom_values(mock_conf_manager_class):
39+
mock_conf_manager = mock_conf_manager_class.return_value
40+
mock_conf_manager.get_conf.return_value = {"my_logger": {"my_field": "DEBUG"}}
41+
expected_log_level = "DEBUG"
42+
43+
log_level = conf_manager.get_log_level(
44+
logger=mock.MagicMock(),
45+
session_key="session_key",
46+
app_name="app_name",
47+
conf_name="conf_name",
48+
log_stanza="my_logger",
49+
log_level_field="my_field",
50+
)
51+
52+
assert log_level == expected_log_level
53+
54+
55+
@mock.patch.object(conf_manager, "ConfManager")
56+
def test_get_log_level_with_no_logging_stanza(mock_conf_manager_class):
57+
mock_conf_manager = mock_conf_manager_class.return_value
58+
mock_conf_manager.get_conf.return_value = mock.MagicMock()
59+
mock_conf_manager.get_conf.return_value.get.side_effect = (
60+
conf_manager.ConfStanzaNotExistException
61+
)
62+
logger = mock.MagicMock()
63+
expected_log_level = "INFO"
64+
65+
log_level = conf_manager.get_log_level(
66+
logger=logger,
67+
session_key="session_key",
68+
app_name="app_name",
69+
conf_name="conf_name",
70+
log_stanza="my_logger",
71+
log_level_field="my_field",
72+
)
73+
74+
assert log_level == expected_log_level
75+
assert logger.error.call_count == 1
76+
77+
78+
@mock.patch.object(conf_manager, "ConfManager")
79+
def test_get_log_level_with_default_fields(mock_conf_manager_class):
80+
mock_conf_manager = mock_conf_manager_class.return_value
81+
mock_conf_manager.get_conf.return_value = {"logging": {"loglevel": "WARN"}}
82+
expected_log_level = "WARN"
83+
84+
log_level = conf_manager.get_log_level(
85+
logger=mock.MagicMock(),
86+
session_key="session_key",
87+
app_name="app_name",
88+
conf_name="conf_name",
89+
)
90+
91+
assert log_level == expected_log_level

0 commit comments

Comments
 (0)