58 lines
1.5 KiB
Python
58 lines
1.5 KiB
Python
import logging
|
||
import os
|
||
import sys
|
||
from logging.handlers import RotatingFileHandler
|
||
|
||
def get_logger(name):
|
||
"""
|
||
获取统一配置的logger实例
|
||
|
||
Args:
|
||
name: logger名称,通常使用 __name__
|
||
|
||
Returns:
|
||
logging.Logger: 配置好的logger实例
|
||
"""
|
||
logger = logging.getLogger(name)
|
||
|
||
# 如果logger已经配置过,直接返回
|
||
if logger.handlers:
|
||
return logger
|
||
|
||
# 设置日志级别
|
||
logger.setLevel(logging.INFO)
|
||
|
||
# 创建日志目录
|
||
log_dir = os.path.join(os.path.dirname(os.path.dirname(os.path.dirname(__file__))), 'logs')
|
||
os.makedirs(log_dir, exist_ok=True)
|
||
|
||
# 创建日志格式
|
||
formatter = logging.Formatter(
|
||
'%(asctime)s - %(name)s - %(levelname)s - %(message)s',
|
||
datefmt='%Y-%m-%d %H:%M:%S'
|
||
)
|
||
|
||
# 文件处理器 - 使用轮转日志
|
||
log_file = os.path.join(log_dir, 'langgraph.log')
|
||
file_handler = RotatingFileHandler(
|
||
log_file,
|
||
maxBytes=10*1024*1024, # 10MB
|
||
backupCount=5,
|
||
encoding='utf-8'
|
||
)
|
||
file_handler.setLevel(logging.INFO)
|
||
file_handler.setFormatter(formatter)
|
||
|
||
# 控制台处理器
|
||
console_handler = logging.StreamHandler(sys.stdout)
|
||
console_handler.setLevel(logging.INFO)
|
||
console_handler.setFormatter(formatter)
|
||
|
||
# 添加处理器
|
||
logger.addHandler(file_handler)
|
||
logger.addHandler(console_handler)
|
||
|
||
# 防止日志向上传播
|
||
logger.propagate = False
|
||
|
||
return logger |