import logging
import json
from logging.handlers import RotatingFileHandler
from openjiuwen_deepsearch.utils.log_utils.log_interface import setup_interface_logger, record_interface_log
def test_setup_interface_logger_stream_handler(monkeypatch):
"""log_dir=None 时,应当配置 StreamHandler"""
logger = logging.getLogger("deepsearch_interface")
logger.handlers.clear()
setup_interface_logger(log_dir=None)
assert len(logger.handlers) == 1
assert isinstance(logger.handlers[0], logging.StreamHandler)
def test_setup_interface_logger_file(tmp_path):
"""log_dir不为None时,创建文件目录与 RotatingFileHandler"""
log_dir = tmp_path / "logs"
log_dir.mkdir()
logger = logging.getLogger("deepsearch_interface")
logger.handlers.clear()
setup_interface_logger(str(log_dir))
assert len(logger.handlers) == 1
handler = logger.handlers[0]
assert isinstance(handler, RotatingFileHandler)
assert handler.baseFilename.endswith("deepsearch_interface.log")
assert (log_dir / "interface").exists()
def test_record_interface_log_success(tmp_path):
"""测试记录成功日志"""
log_dir = tmp_path / "logs"
log_dir.mkdir()
logger = logging.getLogger("deepsearch_interface")
logger.handlers.clear()
setup_interface_logger(str(log_dir))
record_interface_log(
role="user",
session_id="sid123",
api_name="test_api",
duration_min=1.23,
success=True,
response_info={"key": "value"}
)
log_file = log_dir / "interface" / "deepsearch_interface.log"
assert log_file.exists()
content = log_file.read_text(encoding="utf-8")
assert "success" in content
assert "test_api" in content
assert json.dumps({"key": "value"}, ensure_ascii=False) in content
def test_record_interface_log_fail(tmp_path):
"""测试失败情况"""
log_dir = tmp_path / "logs"
log_dir.mkdir()
logger = logging.getLogger("deepsearch_interface")
logger.handlers.clear()
setup_interface_logger(str(log_dir))
record_interface_log(
role="ai",
session_id="sid456",
api_name="api_failed",
duration_min=0.56,
success=False,
response_info={"error": "bad request"}
)
log_file = log_dir / "interface" / "deepsearch_interface.log"
assert log_file.exists()
content = log_file.read_text(encoding="utf-8")
assert "fail" in content
assert "api_failed" in content
assert '"error": "bad request"' in content