From 57b9340a575bf88edfe3786605c689c58129e61a Mon Sep 17 00:00:00 2001 From: fungi8 Date: Sat, 25 Apr 2026 18:39:16 +0800 Subject: [PATCH] Avoid configuring logging during MCPServer init --- src/mcp/server/mcpserver/server.py | 5 +--- tests/server/mcpserver/test_server.py | 10 +++++++ .../mcpserver/utilities/test_logging.py | 27 +++++++++++++++++++ 3 files changed, 38 insertions(+), 4 deletions(-) create mode 100644 tests/server/mcpserver/utilities/test_logging.py diff --git a/src/mcp/server/mcpserver/server.py b/src/mcp/server/mcpserver/server.py index be77705da..d243aef86 100644 --- a/src/mcp/server/mcpserver/server.py +++ b/src/mcp/server/mcpserver/server.py @@ -36,7 +36,7 @@ from mcp.server.mcpserver.resources import FunctionResource, Resource, ResourceManager from mcp.server.mcpserver.tools import Tool, ToolManager from mcp.server.mcpserver.utilities.context_injection import find_context_parameter -from mcp.server.mcpserver.utilities.logging import configure_logging, get_logger +from mcp.server.mcpserver.utilities.logging import get_logger from mcp.server.sse import SseServerTransport from mcp.server.stdio import stdio_server from mcp.server.streamable_http import EventStore @@ -203,9 +203,6 @@ def __init__( self._token_verifier = ProviderTokenVerifier(auth_server_provider) self._custom_starlette_routes: list[Route] = [] - # Configure logging - configure_logging(self.settings.log_level) - @property def name(self) -> str: return self._lowlevel_server.name diff --git a/tests/server/mcpserver/test_server.py b/tests/server/mcpserver/test_server.py index 3457ec944..c9c7da025 100644 --- a/tests/server/mcpserver/test_server.py +++ b/tests/server/mcpserver/test_server.py @@ -1,4 +1,5 @@ import base64 +import logging from pathlib import Path from typing import Any from unittest.mock import AsyncMock, MagicMock, patch @@ -45,6 +46,15 @@ pytestmark = pytest.mark.anyio +async def test_create_server_does_not_configure_logging(monkeypatch: pytest.MonkeyPatch): + basic_config = MagicMock() + monkeypatch.setattr(logging, "basicConfig", basic_config) + + MCPServer() + + basic_config.assert_not_called() + + class TestServer: async def test_create_server(self): mcp = MCPServer( diff --git a/tests/server/mcpserver/utilities/test_logging.py b/tests/server/mcpserver/utilities/test_logging.py new file mode 100644 index 000000000..a84223709 --- /dev/null +++ b/tests/server/mcpserver/utilities/test_logging.py @@ -0,0 +1,27 @@ +import logging +from unittest.mock import MagicMock + +import pytest +from rich.logging import RichHandler + +from mcp.server.mcpserver.utilities.logging import configure_logging, get_logger + + +def test_get_logger_returns_named_logger(): + logger = get_logger("mcp.test") + + assert logger is logging.getLogger("mcp.test") + + +def test_configure_logging_uses_rich_handler(monkeypatch: pytest.MonkeyPatch): + basic_config = MagicMock() + monkeypatch.setattr(logging, "basicConfig", basic_config) + + configure_logging("DEBUG") + + basic_config.assert_called_once() + kwargs = basic_config.call_args.kwargs + assert kwargs["level"] == "DEBUG" + assert kwargs["format"] == "%(message)s" + assert len(kwargs["handlers"]) == 1 + assert isinstance(kwargs["handlers"][0], RichHandler)