Refactor logging system to use unified log_utils module and enhance logging messages across multiple scripts

This commit is contained in:
Misaka_Company
2026-01-12 13:55:28 +08:00
parent 83c90f0161
commit 4721634b81
7 changed files with 227 additions and 246 deletions

136
log_utils.py Normal file
View File

@@ -0,0 +1,136 @@
# log_utils.py
# 统一的日志工具模块
import logging
import os
import sys
from datetime import datetime
import ntfy_utils
# ================= 全局 logger 实例 =================
_logger = None
# ================= 日志格式常量 =================
LOG_FORMAT = '%(asctime)s [%(levelname)s] %(message)s'
DATE_FORMAT = '%Y-%m-%d %H:%M:%S'
class LoggerManager:
"""统一日志管理器"""
def __init__(self, name, log_prefix="app", log_dir="log"):
"""
初始化日志管理器
Args:
name: logger 名称
log_prefix: 日志文件前缀(如 app, sync, migration
log_dir: 日志目录
"""
global _logger
# 创建日志目录
log_path = os.path.join(os.getcwd(), log_dir)
os.makedirs(log_path, exist_ok=True)
# 创建带时间戳的日志文件
timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
log_file = os.path.join(log_path, f"{log_prefix}_{timestamp}.log")
# 创建 logger
_logger = logging.getLogger(name)
_logger.setLevel(logging.INFO)
_logger.handlers = []
# 文件处理器
file_handler = logging.FileHandler(log_file, encoding='utf-8')
file_formatter = logging.Formatter(LOG_FORMAT, DATE_FORMAT)
file_handler.setFormatter(file_formatter)
_logger.addHandler(file_handler)
# 控制台处理器
console_handler = logging.StreamHandler(sys.stdout)
console_formatter = logging.Formatter(LOG_FORMAT, DATE_FORMAT)
console_handler.setFormatter(console_formatter)
_logger.addHandler(console_handler)
_logger.info(f"日志文件: {log_file}")
@staticmethod
def get_logger():
"""获取全局 logger 实例"""
return _logger
# ================= 统一的日志辅助函数 =================
# 无需 logger 参数,内部使用全局 _logger
def log_success(message):
"""成功消息 - ✅ 发送 ntfy 通知 (default)"""
_logger.info(f"✅ [成功] {message}")
ntfy_utils.send_ntfy(f"✅ [成功] {message}", title="同步任务成功", priority="default", tags=["white_check_mark"])
def log_error(message, exc_info=False):
"""错误消息 - ❌ 发送 ntfy 通知 (high)"""
_logger.error(f"❌ [错误] {message}", exc_info=exc_info)
ntfy_utils.send_error(f"❌ [错误] {message}")
def log_warning(message):
"""警告消息 - ⚠️ 不发送 ntfy 通知"""
_logger.warning(f"⚠️ [警告] {message}")
def log_critical(message, exc_info=False):
"""严重错误 - 🔥 发送 ntfy 通知 (urgent)"""
_logger.critical(f"🔥 [严重] {message}", exc_info=exc_info)
ntfy_utils.send_critical(f"🔥 [严重] {message}")
def log_start(message):
"""启动消息 - 🚀 发送 ntfy 通知 (default)"""
_logger.info(f"🚀 [启动] {message}")
ntfy_utils.send_ntfy(f"🚀 [启动] {message}", title="任务启动", priority="default", tags=["rocket"])
def log_complete(message):
"""完成消息 - 🎯 发送 ntfy 通知 (default)"""
_logger.info(f"🎯 [完成] {message}")
ntfy_utils.send_ntfy(f"🎯 [完成] {message}", title="任务完成", priority="default", tags=["checkered_flag"])
def log_stop(message):
"""停止消息 - 🛑 发送 ntfy 通知 (default)"""
_logger.info(f"🛑 [停止] {message}")
ntfy_utils.send_ntfy(f"🛑 [停止] {message}", title="服务停止", priority="default", tags=["stop_sign"])
def log_info(message):
"""信息消息 - 不发送 ntfy 通知"""
_logger.info(f" {message}")
def log_processing(message):
"""处理中消息 - 🔄 不发送 ntfy 通知"""
_logger.info(f"🔄 [处理] {message}")
def log_skip(message):
"""跳过消息 - ⏭️ 不发送 ntfy 通知"""
_logger.info(f"⏭️ [跳过] {message}")
def log_file(message):
"""文件操作消息 - 📂 不发送 ntfy 通知"""
_logger.info(f"📂 [文件] {message}")
def log_database(message):
"""数据库操作消息 - 💾 不发送 ntfy 通知"""
_logger.info(f"💾 [数据库] {message}")
def log_sync(message):
"""同步操作消息 - 🔃 不发送 ntfy 通知"""
_logger.info(f"🔃 [同步] {message}")