[BugFix] Make "logging_suppress" in SystemSettings Mutable and Then Actually Suppress Logging Service (#6933)

* make logging_suppress mutable and then actually suppress the logging service

* no startup log if true

* fix tests

* make kwarg truncate bigger

* fix other tests
This commit is contained in:
Danglewood
2024-11-11 05:34:18 -08:00
committed by GitHub
parent baff57dfc8
commit 804534ed31
8 changed files with 68 additions and 42 deletions

View File

@@ -35,9 +35,9 @@ class HandlersManager:
self._add_stderr_handler()
elif handler_type == "noop":
self._add_noop_handler()
elif handler_type == "file":
elif handler_type == "file" and not self._settings.logging_suppress:
self._add_file_handler()
elif handler_type == "posthog":
elif handler_type == "posthog" and not self._settings.logging_suppress:
self._add_posthog_handler()
else:
self._logger.debug("Unknown log handler.")
@@ -81,6 +81,9 @@ class HandlersManager:
"""Update the handlers with new settings."""
logger = self._logger
for hdlr in logger.handlers:
if isinstance(hdlr, (PathTrackingFileHandler, PosthogHandler)):
if (
isinstance(hdlr, (PathTrackingFileHandler, PosthogHandler))
and not settings.logging_suppress
):
hdlr.settings = settings
hdlr.formatter.settings = settings # type: ignore

View File

@@ -217,42 +217,44 @@ class LoggingService(metaclass=SingletonMeta):
)
self._handlers_manager.update_handlers(self._logging_settings)
if "login" in route:
self._log_startup(route, custom_headers)
else:
if not self._logging_settings.logging_suppress:
# Remove CommandContext if any
kwargs.pop("cc", None)
if "login" in route:
self._log_startup(route, custom_headers)
else:
# Get provider for posthog logs
passed_model = kwargs.get("provider_choices", DummyProvider())
provider = (
passed_model.provider
if hasattr(passed_model, "provider")
else "not_passed_to_kwargs"
)
# Remove CommandContext if any
kwargs.pop("cc", None)
# Truncate kwargs if too long
kwargs = {k: str(v)[:100] for k, v in kwargs.items()}
# Get execution info
error = None if all(i is None for i in exec_info) else str(exec_info[1])
# Get provider for posthog logs
passed_model = kwargs.get("provider_choices", DummyProvider())
provider = (
passed_model.provider
if hasattr(passed_model, "provider")
else "not_passed_to_kwargs"
)
# Construct message
message_label = "ERROR" if error else "CMD"
log_message = json.dumps(
{
"route": route,
"input": kwargs,
"error": error,
"provider": provider,
"custom_headers": custom_headers,
},
default=to_jsonable_python,
)
log_message = f"{message_label}: {log_message}"
log_level = self._logger.error if error else self._logger.info
log_level(
log_message,
extra={"func_name_override": func.__name__},
exc_info=exec_info,
)
# Truncate kwargs if too long
kwargs = {k: str(v)[:300] for k, v in kwargs.items()}
# Get execution info
error = None if all(i is None for i in exec_info) else str(exec_info[1])
# Construct message
message_label = "ERROR" if error else "CMD"
log_message = json.dumps(
{
"route": route,
"input": kwargs,
"error": error,
"provider": provider,
"custom_headers": custom_headers,
},
default=to_jsonable_python,
)
log_message = f"{message_label}: {log_message}"
log_level = self._logger.error if error else self._logger.info
log_level(
log_message,
extra={"func_name_override": func.__name__},
exc_info=exec_info,
)

View File

@@ -49,6 +49,8 @@ class LoggingSettings:
self.platform: str = system_settings.platform
self.python_version: str = system_settings.python_version
self.platform_version: str = system_settings.version
self.logging_suppress: bool = system_settings.logging_suppress
self.log_collect: bool = system_settings.log_collect
# User
self.user_id: Optional[str] = user_id
self.user_logs_directory: Path = get_log_dir(user_data_directory)

View File

@@ -22,6 +22,7 @@ class SystemService(metaclass=SingletonMeta):
"api_settings",
"python_settings",
"debug_mode",
"logging_suppress",
}
PRO_VALIDATION_HASH = "300ac59fdcc8f899e0bc5c18cda8652220735da1a00e2af365efe9d8e5fe8306" # pragma: allowlist secret

View File

@@ -30,6 +30,8 @@ logging_settings.user_logs_directory.absolute.return_value = Path(
)
logging_settings.session_id = "test_session_id"
logging_settings.frequency = "H"
logging_settings.logging_suppress = False
logging_settings.log_collect = True
@pytest.fixture(scope="module")

View File

@@ -54,6 +54,8 @@ logging_settings.platform = "Windows"
logging_settings.python_version = "3.9"
logging_settings.platform_version = "1.2.3"
logging_settings.user_id = "user123"
logging_settings.logging_suppress = False
logging_settings.log_collect = True
@pytest.fixture

View File

@@ -53,6 +53,8 @@ def test_handlers_added_correctly():
settings = Mock()
settings.verbosity = 20
settings.handler_list = ["stdout", "stderr", "noop", "file", "posthog"]
settings.log_collect = True
settings.logging_suppress = False
logger = logging.getLogger("test_handlers_added_correctly")
handlers_manager = HandlersManager(logger=logger, settings=settings)
handlers_manager.setup()

View File

@@ -13,6 +13,15 @@ from pydantic import BaseModel
# pylint: disable=redefined-outer-name, protected-access
class MockSystemSettings:
"""Mock system settings."""
def __init__(self):
"""Initialize the mock system settings."""
self.logging_suppress = False
self.log_collect = True
class MockLoggingSettings:
"""Mock logging settings."""
@@ -20,6 +29,8 @@ class MockLoggingSettings:
"""Initialize the mock logging settings."""
self.system_settings = system_settings
self.user_settings = user_settings
self.logging_suppress = False
self.log_collect = True
class MockOBBject(BaseModel):
@@ -32,7 +43,7 @@ class MockOBBject(BaseModel):
@pytest.fixture(scope="function")
def logging_service():
"""Return a LoggingService instance."""
mock_system_settings = Mock()
mock_system_settings = MockSystemSettings()
mock_user_settings = Mock()
mock_setup_handlers = Mock()
mock_log_startup = Mock()
@@ -112,6 +123,7 @@ def test_log_startup(logging_service):
credentials=MockCredentials(username="username", password="password"),
)
logging_service._system_settings = "your_system_settings"
logging_service._system_settings
logging_service._log_startup(
route="test_route", custom_headers={"X-OpenBB-Test": "test"}
@@ -138,7 +150,7 @@ def test_log_startup(logging_service):
[
(
"mock_settings",
"mock_system",
MockSystemSettings(),
"mock_route",
"mock_func",
{},
@@ -149,7 +161,7 @@ def test_log_startup(logging_service):
),
(
"mock_settings",
"mock_system",
MockSystemSettings(),
"mock_route",
"mock_func",
{},
@@ -163,7 +175,7 @@ def test_log_startup(logging_service):
),
(
"mock_settings",
"mock_system",
MockSystemSettings(),
"login",
"mock_func",
{},