1616from . import __version__
1717from .config import get_config , load_config
1818from .core .server import create_server
19+ from .logging_config import configure_structured_logging , get_logger
1920from .registries .prompts import (
2021 model_diagnostic_prompt ,
2122 panel_regression_prompt ,
2829from .transport .stdio import StdioTransport
2930
3031# Modern Python 3.10+ syntax for type hints
31- # Configure logging to stderr only
32- logging .basicConfig (
33- level = logging .INFO ,
34- format = "%(asctime)s - %(name)s - %(levelname)s - %(message)s" ,
35- stream = sys .stderr ,
36- )
37- logger = logging .getLogger (__name__ )
32+ # Structured logging will be configured in CLI commands based on config
33+ logger = get_logger (__name__ )
3834
3935
4036async def _run_server_with_transport (server , transport ) -> None :
@@ -57,8 +53,14 @@ async def _run_server_with_transport(server, transport) -> None:
5753 help = "Path to configuration file" ,
5854)
5955@click .option ("--debug" , is_flag = True , help = "Enable debug mode" )
56+ @click .option (
57+ "--log-format" ,
58+ type = click .Choice (["structured" , "pretty" ]),
59+ default = "structured" ,
60+ help = "Log output format (structured=JSON, pretty=colored console)" ,
61+ )
6062@click .pass_context
61- def cli (ctx , config : Path , debug : bool ):
63+ def cli (ctx , config : Path , debug : bool , log_format : str ):
6264 """RMCP MCP Server - Comprehensive statistical analysis with 44 tools across 11 categories."""
6365 # Ensure context object exists
6466 ctx .ensure_object (dict )
@@ -71,6 +73,7 @@ def cli(ctx, config: Path, debug: bool):
7173
7274 # Store config in context for subcommands
7375 ctx .obj ["config" ] = load_config (config_file = config , overrides = overrides )
76+ ctx .obj ["log_format" ] = log_format
7477
7578
7679@cli .command ()
@@ -84,10 +87,15 @@ def start(ctx, log_level: str):
8487 """Start RMCP MCP server (default stdio transport)."""
8588 # Get configuration
8689 config = ctx .obj .get ("config" ) or get_config ()
90+ log_format = ctx .obj .get ("log_format" , "structured" )
8791
88- # Set logging level (CLI option overrides config)
92+ # Configure structured logging
8993 effective_log_level = log_level or config .logging .level
90- logging .getLogger ().setLevel (getattr (logging , effective_log_level .upper ()))
94+ configure_structured_logging (
95+ level = effective_log_level ,
96+ development_mode = (log_format == "pretty" or config .debug ),
97+ enable_console = True ,
98+ )
9199
92100 logger .info (f"Starting RMCP MCP Server v{ __version__ } " )
93101 if config .debug :
@@ -291,6 +299,14 @@ def serve_http(
291299
292300 # Get configuration
293301 config = ctx .obj .get ("config" ) or get_config ()
302+ log_format = ctx .obj .get ("log_format" , "structured" )
303+
304+ # Configure structured logging for HTTP transport
305+ configure_structured_logging (
306+ level = config .logging .level ,
307+ development_mode = (log_format == "pretty" or config .debug ),
308+ enable_console = True ,
309+ )
294310
295311 # Use CLI options or fall back to config
296312 effective_host = host or config .http .host
0 commit comments