初始化
This commit is contained in:
91
core/logger.py
Normal file
91
core/logger.py
Normal file
@@ -0,0 +1,91 @@
|
||||
"""
|
||||
日志配置模块
|
||||
- 日志文件: logs/app_YYYYMMDD.log
|
||||
- 日志格式: [时间] [级别] [模块] 消息
|
||||
- 自动清理30天前的旧日志
|
||||
"""
|
||||
import os
|
||||
import logging
|
||||
import datetime
|
||||
from pathlib import Path
|
||||
|
||||
|
||||
def get_logs_dir() -> Path:
|
||||
"""获取日志目录路径"""
|
||||
# 获取应用根目录
|
||||
app_root = Path(__file__).parent.parent
|
||||
logs_dir = app_root / "logs"
|
||||
logs_dir.mkdir(exist_ok=True)
|
||||
return logs_dir
|
||||
|
||||
|
||||
def get_log_file_path() -> Path:
|
||||
"""获取当天的日志文件路径"""
|
||||
today = datetime.date.today().strftime("%Y%m%d")
|
||||
return get_logs_dir() / f"app_{today}.log"
|
||||
|
||||
|
||||
def setup_logging():
|
||||
"""配置日志系统"""
|
||||
log_file = get_log_file_path()
|
||||
|
||||
# 日志格式
|
||||
log_format = "[%(asctime)s] [%(levelname)s] [%(name)s] %(message)s"
|
||||
date_format = "%Y-%m-%d %H:%M:%S"
|
||||
|
||||
# 配置根日志器
|
||||
logging.basicConfig(
|
||||
level=logging.DEBUG,
|
||||
format=log_format,
|
||||
datefmt=date_format,
|
||||
handlers=[
|
||||
# 文件处理器
|
||||
logging.FileHandler(log_file, encoding="utf-8"),
|
||||
# 控制台处理器
|
||||
logging.StreamHandler()
|
||||
]
|
||||
)
|
||||
|
||||
# 记录启动日志
|
||||
logging.info("=" * 50)
|
||||
logging.info("奶酪云工具箱 启动")
|
||||
logging.info("=" * 50)
|
||||
|
||||
# 清理旧日志
|
||||
cleanup_old_logs()
|
||||
|
||||
|
||||
def cleanup_old_logs(days: int = 30):
|
||||
"""清理指定天数前的旧日志"""
|
||||
logs_dir = get_logs_dir()
|
||||
cutoff_date = datetime.date.today() - datetime.timedelta(days=days)
|
||||
|
||||
for log_file in logs_dir.glob("app_*.log"):
|
||||
try:
|
||||
# 从文件名提取日期
|
||||
date_str = log_file.stem.replace("app_", "")
|
||||
file_date = datetime.datetime.strptime(date_str, "%Y%m%d").date()
|
||||
|
||||
if file_date < cutoff_date:
|
||||
log_file.unlink()
|
||||
logging.info(f"已清理旧日志文件: {log_file.name}")
|
||||
except (ValueError, OSError) as e:
|
||||
logging.warning(f"清理日志文件失败 {log_file}: {e}")
|
||||
|
||||
|
||||
def get_all_log_files() -> list:
|
||||
"""获取所有日志文件列表(按时间倒序)"""
|
||||
logs_dir = get_logs_dir()
|
||||
log_files = list(logs_dir.glob("app_*.log"))
|
||||
log_files.sort(key=lambda x: x.name, reverse=True)
|
||||
return log_files
|
||||
|
||||
|
||||
def read_log_file(file_path: Path) -> str:
|
||||
"""读取日志文件内容"""
|
||||
try:
|
||||
with open(file_path, "r", encoding="utf-8") as f:
|
||||
return f.read()
|
||||
except Exception as e:
|
||||
return f"读取日志文件失败: {e}"
|
||||
|
||||
Reference in New Issue
Block a user