From 6bf4ea7a06c1f049189b1c77f2b9d88c2b14470a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=96=87=E8=96=87=E5=AE=89?= Date: Tue, 13 Jan 2026 21:57:18 +0800 Subject: [PATCH] a --- backend/api/main.py | 66 +++++++++++++++++++++++++++++++++++++++++++++ backend/start.sh | 10 +++++-- 2 files changed, 74 insertions(+), 2 deletions(-) diff --git a/backend/api/main.py b/backend/api/main.py index 8e43049..874cf69 100644 --- a/backend/api/main.py +++ b/backend/api/main.py @@ -5,7 +5,9 @@ from fastapi import FastAPI from fastapi.middleware.cors import CORSMiddleware from api.routes import config, trades, stats, dashboard, account import os +import logging from pathlib import Path +from logging.handlers import RotatingFileHandler # 加载.env文件 try: @@ -24,6 +26,70 @@ except ImportError: except Exception: pass +# 配置日志 +def setup_logging(): + """配置日志系统""" + # 获取日志级别 + log_level = os.getenv('LOG_LEVEL', 'INFO').upper() + log_level_map = { + 'DEBUG': logging.DEBUG, + 'INFO': logging.INFO, + 'WARNING': logging.WARNING, + 'ERROR': logging.ERROR, + 'CRITICAL': logging.CRITICAL + } + level = log_level_map.get(log_level, logging.INFO) + + # 创建日志目录 + backend_dir = Path(__file__).parent.parent + log_dir = backend_dir / 'logs' + log_dir.mkdir(exist_ok=True) + + # 日志文件路径 + log_file = log_dir / 'api.log' + + # 配置根日志记录器 + root_logger = logging.getLogger() + root_logger.setLevel(level) + + # 清除现有的处理器 + root_logger.handlers.clear() + + # 创建格式器 + formatter = logging.Formatter( + '%(asctime)s - %(name)s - %(levelname)s - %(message)s', + datefmt='%Y-%m-%d %H:%M:%S' + ) + + # 文件处理器(带轮转) + file_handler = RotatingFileHandler( + log_file, + maxBytes=10 * 1024 * 1024, # 10MB + backupCount=5, + encoding='utf-8' + ) + file_handler.setLevel(level) + file_handler.setFormatter(formatter) + root_logger.addHandler(file_handler) + + # 控制台处理器 + console_handler = logging.StreamHandler() + console_handler.setLevel(level) + console_handler.setFormatter(formatter) + root_logger.addHandler(console_handler) + + # 设置第三方库的日志级别 + logging.getLogger('uvicorn').setLevel(logging.WARNING) + logging.getLogger('uvicorn.access').setLevel(logging.WARNING) + + return log_file + +# 初始化日志 +log_file = setup_logging() +logger = logging.getLogger(__name__) +logger.info(f"日志系统已初始化,日志文件: {log_file}") +logger.info(f"日志级别: {os.getenv('LOG_LEVEL', 'INFO')}") + app = FastAPI( title="Auto Trade System API", version="1.0.0", diff --git a/backend/start.sh b/backend/start.sh index bbaba77..7d4032b 100755 --- a/backend/start.sh +++ b/backend/start.sh @@ -25,8 +25,14 @@ export CORS_ORIGINS=${CORS_ORIGINS:-http://localhost:3000,http://localhost:5173} # 创建日志目录 mkdir -p logs +# 设置日志级别(如果未设置) +export LOG_LEVEL=${LOG_LEVEL:-INFO} + # 启动服务(后台运行) -nohup uvicorn api.main:app --host 0.0.0.0 --port 8001 > logs/api.log 2>&1 & +# 注意:Python日志会输出到 logs/api.log,uvicorn的访问日志也会输出到同一个文件 +nohup uvicorn api.main:app --host 0.0.0.0 --port 8001 --log-level info > logs/uvicorn.log 2>&1 & echo "后端服务已启动,PID: $!" -echo "日志文件: logs/api.log" +echo "Python日志文件: logs/api.log" +echo "Uvicorn日志文件: logs/uvicorn.log" +echo "查看日志: tail -f logs/api.log"