langchain-learning-kit/app/utils/logger.py

73 lines
1.8 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

"""
使用 structlog 的结构化日志配置。
"""
import logging
import sys
from typing import Any
import structlog
from structlog.types import EventDict, Processor
def add_app_context(logger: Any, method_name: str, event_dict: EventDict) -> EventDict:
"""
向日志事件添加应用程序上下文。
Args:
logger: 日志记录器实例
method_name: 方法名
event_dict: 事件字典
Returns:
EventDict: 修改后的事件字典
"""
event_dict["app"] = "langchain-learning-kit"
return event_dict
def configure_logging(log_level: str = "INFO") -> None:
"""
配置结构化日志。
Args:
log_level: 日志级别DEBUG、INFO、WARNING、ERROR、CRITICAL
"""
# 配置标准日志
logging.basicConfig(
format="%(message)s",
stream=sys.stdout,
level=getattr(logging, log_level.upper()),
)
# 配置 structlog
structlog.configure(
processors=[
structlog.contextvars.merge_contextvars,
structlog.processors.add_log_level,
structlog.processors.StackInfoRenderer(),
structlog.dev.set_exc_info,
structlog.processors.TimeStamper(fmt="iso"),
add_app_context,
structlog.processors.JSONRenderer(),
],
wrapper_class=structlog.make_filtering_bound_logger(
getattr(logging, log_level.upper())
),
context_class=dict,
logger_factory=structlog.PrintLoggerFactory(),
cache_logger_on_first_use=True,
)
def get_logger(name: str = __name__) -> structlog.BoundLogger:
"""
获取结构化日志记录器实例。
Args:
name: 日志记录器名称
Returns:
structlog.BoundLogger: 日志记录器实例
"""
return structlog.get_logger(name)