56 lines
1.4 KiB
Python
56 lines
1.4 KiB
Python
# -*- encoding=utf8 -*-
|
||
"""
|
||
日志管理模块
|
||
提供统一的日志记录,同时输出到控制台和文件,支持日志轮转
|
||
"""
|
||
import os
|
||
import logging
|
||
from logging.handlers import RotatingFileHandler
|
||
from config import LOG_DIR, LOG_FILE, LOG_MAX_BYTES, LOG_BACKUP_COUNT, LOG_FORMAT, LOG_DATE_FORMAT
|
||
|
||
|
||
def setup_logger(name='dispatcher', level=logging.INFO):
|
||
"""创建并配置 logger
|
||
|
||
Args:
|
||
name: logger 名称
|
||
level: 日志级别
|
||
|
||
Returns:
|
||
logging.Logger 实例
|
||
"""
|
||
logger = logging.getLogger(name)
|
||
|
||
# 避免重复添加 handler
|
||
if logger.handlers:
|
||
return logger
|
||
|
||
logger.setLevel(level)
|
||
|
||
formatter = logging.Formatter(LOG_FORMAT, datefmt=LOG_DATE_FORMAT)
|
||
|
||
# 控制台 handler(保留原有的控制台输出)
|
||
console_handler = logging.StreamHandler()
|
||
console_handler.setLevel(level)
|
||
console_handler.setFormatter(formatter)
|
||
logger.addHandler(console_handler)
|
||
|
||
# 文件 handler(带日志轮转)
|
||
os.makedirs(LOG_DIR, exist_ok=True)
|
||
log_path = os.path.join(LOG_DIR, LOG_FILE)
|
||
file_handler = RotatingFileHandler(
|
||
log_path,
|
||
maxBytes=LOG_MAX_BYTES,
|
||
backupCount=LOG_BACKUP_COUNT,
|
||
encoding='utf-8'
|
||
)
|
||
file_handler.setLevel(level)
|
||
file_handler.setFormatter(formatter)
|
||
logger.addHandler(file_handler)
|
||
|
||
return logger
|
||
|
||
|
||
# 全局 logger 实例,直接导入使用
|
||
logger = setup_logger()
|