45 lines
1.6 KiB
Python
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"
|