Files
111 998211c483 feat: 初始化考培练系统项目
- 从服务器拉取完整代码
- 按框架规范整理项目结构
- 配置 Drone CI 测试环境部署
- 包含后端(FastAPI)、前端(Vue3)、管理端

技术栈: Vue3 + TypeScript + FastAPI + MySQL
2026-01-24 19:33:28 +08:00

77 lines
1.6 KiB
Python

"""
日志配置
"""
import logging
import sys
from typing import Any
import structlog
from structlog.stdlib import LoggerFactory
from app.core.config import get_settings
settings = get_settings()
def setup_logging():
"""
配置日志系统
"""
# 设置日志级别
log_level = getattr(logging, settings.LOG_LEVEL.upper(), logging.INFO)
# 配置标准库日志
logging.basicConfig(
format="%(message)s",
stream=sys.stdout,
level=log_level,
)
# 配置处理器
processors = [
structlog.stdlib.filter_by_level,
structlog.stdlib.add_logger_name,
structlog.stdlib.add_log_level,
structlog.stdlib.PositionalArgumentsFormatter(),
structlog.processors.TimeStamper(fmt="iso"),
structlog.processors.StackInfoRenderer(),
structlog.processors.format_exc_info,
structlog.processors.UnicodeDecoder(),
]
# 根据配置选择输出格式
if getattr(settings, "LOG_FORMAT", "text") == "json":
processors.append(structlog.processors.JSONRenderer())
else:
processors.append(structlog.dev.ConsoleRenderer())
# 配置 structlog
structlog.configure(
processors=processors,
context_class=dict,
logger_factory=LoggerFactory(),
cache_logger_on_first_use=True,
)
# 设置日志
setup_logging()
# 获取日志器
def get_logger(name: str = __name__) -> Any:
"""
获取日志器
Args:
name: 日志器名称
Returns:
日志器实例
"""
return structlog.get_logger(name)
# 默认日志器
logger = get_logger("app")