- 添加认证模块 (auth.py) - 添加 CRUD 基础操作 (crud.py) - 添加异常处理 (exceptions.py) - 添加日志模块 (logging.py) - 添加响应格式 (response.py) - 添加依赖注入 (dependencies.py) Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
67 lines
1.8 KiB
Python
67 lines
1.8 KiB
Python
"""
|
|
Logging Configuration
|
|
日志配置
|
|
"""
|
|
import logging
|
|
import sys
|
|
from typing import Any
|
|
from logging.handlers import RotatingFileHandler
|
|
from pathlib import Path
|
|
from app.core.config import get_settings
|
|
|
|
settings = get_settings()
|
|
|
|
# Log directory
|
|
LOG_DIR = Path("./logs")
|
|
LOG_DIR.mkdir(exist_ok=True)
|
|
|
|
|
|
def setup_logging(name: str = "yg_dataset") -> logging.Logger:
|
|
"""Setup application logging"""
|
|
logger = logging.getLogger(name)
|
|
logger.setLevel(logging.DEBUG if settings.DEBUG else logging.INFO)
|
|
|
|
# Avoid duplicate handlers
|
|
if logger.handlers:
|
|
return logger
|
|
|
|
# Console handler
|
|
console_handler = logging.StreamHandler(sys.stdout)
|
|
console_handler.setLevel(logging.DEBUG if settings.DEBUG else logging.INFO)
|
|
console_formatter = logging.Formatter(
|
|
fmt="%(asctime)s | %(levelname)-8s | %(name)s:%(funcName)s:%(lineno)d | %(message)s",
|
|
datefmt="%Y-%m-%d %H:%M:%S"
|
|
)
|
|
console_handler.setFormatter(console_formatter)
|
|
logger.addHandler(console_handler)
|
|
|
|
# File handler
|
|
file_handler = RotatingFileHandler(
|
|
LOG_DIR / f"{name}.log",
|
|
maxBytes=10 * 1024 * 1024, # 10MB
|
|
backupCount=5,
|
|
encoding="utf-8"
|
|
)
|
|
file_handler.setLevel(logging.INFO)
|
|
file_formatter = logging.Formatter(
|
|
fmt="%(asctime)s | %(levelname)-8s | %(name)s:%(funcName)s:%(lineno)d | %(message)s",
|
|
datefmt="%Y-%m-%d %H:%M:%S"
|
|
)
|
|
file_handler.setFormatter(file_formatter)
|
|
logger.addHandler(file_handler)
|
|
|
|
return logger
|
|
|
|
|
|
# Create default logger
|
|
logger = setup_logging()
|
|
|
|
|
|
class LoggerMixin:
|
|
"""Mixin to add logging capability to classes"""
|
|
|
|
@property
|
|
def log(self) -> logging.Logger:
|
|
"""Get logger for this class"""
|
|
return logging.getLogger(self.__class__.__module__ + "." + self.__class__.__name__)
|