3.1 KiB
3.1 KiB
Logging Improvements Design
Overview
Improve MCP server logging to provide meaningful operational visibility. Replace generic HTTP request logs with application-level context including agent identity, tool usage, document access, and operation stats.
Current State
Logs show only uvicorn HTTP requests with no application context:
INFO: 172.20.0.2:43254 - "POST /messages?session_id=... HTTP/1.1" 202 Accepted
INFO: 127.0.0.1:41508 - "GET /health HTTP/1.1" 200 OK
Desired State
Human-readable single-line format with full context:
2025-01-02 10:15:23 | dev-agent (abc...xyz) | get_records | sales | 42 records | success | 125ms
2025-01-02 10:15:24 | dev-agent (abc...xyz) | update_records | sales | 3 records | success | 89ms
2025-01-02 10:15:25 | dev-agent (abc...xyz) | add_records | inventory | 5 records | error | 89ms
Grist API error: Invalid column 'foo'
Design Decisions
| Decision | Choice |
|---|---|
| Log format | Human-readable single-line (pipe-delimited) |
| Configuration | Environment variable only (LOG_LEVEL) |
| Log levels | Standard (DEBUG/INFO/WARNING/ERROR) |
| Health checks | DEBUG level only (suppressed at INFO) |
| Error details | Multi-line (indented on second line) |
Log Format
YYYY-MM-DD HH:MM:SS | <agent_name> (<token_truncated>) | <tool> | <document> | <stats> | <status> | <duration>
Token truncation: First 3 and last 3 characters (e.g., abc...xyz). Tokens <=8 chars show ***.
Document field: Shows - for tools without a document (e.g., list_documents).
Log Levels
| Level | Events |
|---|---|
| ERROR | Unhandled exceptions, Grist API failures |
| WARNING | Auth errors (invalid token, permission denied) |
| INFO | Tool calls (one line per call with stats) |
| DEBUG | Health checks, detailed arguments, full results |
Environment variable: LOG_LEVEL (default: INFO)
Stats Per Tool
| Tool | Stats |
|---|---|
list_documents |
N docs |
list_tables |
N tables |
describe_table |
N columns |
get_records |
N records |
sql_query |
N rows |
add_records |
N records |
update_records |
N records |
delete_records |
N records |
create_table |
N columns |
add_column |
1 column |
modify_column |
1 column |
delete_column |
1 column |
Files Changed
| File | Change |
|---|---|
src/grist_mcp/logging.py |
New - logging setup, formatters, stats extraction |
src/grist_mcp/main.py |
Call setup_logging(), configure uvicorn logger |
src/grist_mcp/server.py |
Wrap call_tool with logging |
tests/unit/test_logging.py |
New - unit tests for logging module |
Tool implementations in tools/ remain unchanged - logging is handled at the server layer.
Testing
Unit tests:
test_setup_logging_default_leveltest_setup_logging_from_envtest_token_truncationtest_extract_statstest_format_log_linetest_error_multiline_format
Manual verification:
- Run
make dev-up, make tool calls, verify log format - Test with
LOG_LEVEL=DEBUGfor verbose output