Files
YG-Datasets/backend/app/core/logging.py

67 lines
1.8 KiB
Python
Raw Normal View History

"""
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__)