Files
system-backu/backend/app/utils/logging.py
T
publ 4e3a4b4602 feat: 数据备份管理系统 v0.1.0
带 Web 操作界面的备份系统,支持:
- 数据源:MySQL 数据库(mysqldump)、服务器目录(tar.gz)
- 存储目标:本地目录、S3 兼容对象存储(MinIO/Ceph/AWS S3)
- 触发方式:手动 + Cron 定时调度(APScheduler)
- 备份还原:MySQL 库、目录
- JWT 登录认证 + Fernet 字段加密
- 保留策略:按数量 + 按天数双重清理

技术栈:FastAPI + SQLAlchemy 2 + APScheduler + aioboto3;
前端 Vite + React 18 + TypeScript + Ant Design 5 + Zustand。
Docker Compose 一键起。

Co-Authored-By: Claude <noreply@anthropic.com>
2026-06-22 18:27:41 +08:00

51 lines
1.3 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.
"""日志配置:控制台 + 文件 + 单 run StringIO Tee。"""
import logging
import os
import sys
from datetime import datetime
from logging.handlers import RotatingFileHandler
from pathlib import Path
from app.config import get_settings
_settings = get_settings()
_LOG_DIR = Path("logs")
_LOG_DIR.mkdir(parents=True, exist_ok=True)
def setup_logging() -> None:
"""应用启动时调用一次。"""
root = logging.getLogger()
root.setLevel(_settings.LOG_LEVEL.upper())
# 避免重复添加 handleruvicorn 重载时)
if root.handlers:
return
fmt = logging.Formatter(
"%(asctime)s | %(levelname)-7s | %(name)s | %(message)s",
datefmt="%Y-%m-%d %H:%M:%S",
)
# 控制台
console = logging.StreamHandler(sys.stdout)
console.setFormatter(fmt)
root.addHandler(console)
# 文件
log_file = _LOG_DIR / f"app-{datetime.now():%Y-%m-%d}.log"
file_handler = RotatingFileHandler(
log_file, maxBytes=20 * 1024 * 1024, backupCount=10, encoding="utf-8"
)
file_handler.setFormatter(fmt)
root.addHandler(file_handler)
# 调整 uvicorn 噪音
logging.getLogger("uvicorn.access").setLevel(logging.WARNING)
logging.getLogger("apscheduler.scheduler").setLevel(logging.INFO)
def get_logger(name: str) -> logging.Logger:
return logging.getLogger(name)