Files
ea-chatbot-lg/tests/test_logging_context.py

45 lines
1.6 KiB
Python

import logging
import pytest
import io
import json
from ea_chatbot.utils.logging import ContextLoggerAdapter, JsonFormatter
@pytest.fixture
def json_log_capture():
"""Fixture to capture JSON logs."""
log_stream = io.StringIO()
logger = logging.getLogger("test_context")
logger.setLevel(logging.INFO)
for handler in logger.handlers[:]:
logger.removeHandler(handler)
handler = logging.StreamHandler(log_stream)
handler.setFormatter(JsonFormatter())
logger.addHandler(handler)
return logger, log_stream
def test_context_logger_adapter_injects_metadata(json_log_capture):
"""Test that ContextLoggerAdapter injects metadata into the log record."""
logger, log_stream = json_log_capture
adapter = ContextLoggerAdapter(logger, {"run_id": "123", "node_name": "test_node"})
adapter.info("test message")
data = json.loads(log_stream.getvalue())
assert data["message"] == "test message"
assert data["run_id"] == "123"
assert data["node_name"] == "test_node"
def test_context_logger_adapter_override_metadata(json_log_capture):
"""Test that extra metadata can be provided during call."""
logger, log_stream = json_log_capture
adapter = ContextLoggerAdapter(logger, {"run_id": "123"})
# Passing extra context via the 'extra' parameter in standard logging
# Note: Our adapter should handle merging this.
adapter.info("test message", extra={"node_name": "dynamic_node"})
data = json.loads(log_stream.getvalue())
assert data["run_id"] == "123"
assert data["node_name"] == "dynamic_node"