Setup logger for main.py

This commit is contained in:
DingZQ
2025-05-18 19:29:39 +08:00
parent 6321146abd
commit 5f3f75a0bc

58
main.py
View File

@@ -26,6 +26,9 @@ import py_linq
import time_api
import simulation
import globals
import os
import logging
from logging.handlers import TimedRotatingFileHandler
JUNCTION = 0
RESERVOIR = 1
@@ -79,13 +82,44 @@ redis_client = redis.Redis(host="localhost", port=6379, db=0)
# influx_org_name = influxdb_info.org
# influx_client = InfluxDBClient(url=influx_url, token=influx_token, org=influx_org_name, timeout=100*1000) # 100 seconds
# 配置日志记录器
logging.basicConfig(
level=logging.INFO,
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',
datefmt='%Y-%m-%d %H:%M:%S'
)
logger = logging.getLogger(__name__)
def setup_logger():
# 创建日志目录
log_dir = "logs"
os.makedirs(log_dir, exist_ok=True)
# 配置基础日志格式
log_format = "%(asctime)s - %(levelname)s - %(message)s"
formatter = logging.Formatter(log_format)
# 创建主 Logger
logger = logging.getLogger()
logger.setLevel(logging.DEBUG) # 全局日志级别
# --- 1. 按日期分割的日志文件 Handler ---
log_file = os.path.join(log_dir, "fastapi.log")
file_handler = TimedRotatingFileHandler(
filename=log_file,
when="midnight", # 每天午夜轮转
interval=1,
backupCount=7,
encoding="utf-8"
)
file_handler.suffix = "fastapi-%Y-%m-%d.log" # 文件名格式
file_handler.setFormatter(formatter)
file_handler.setLevel(logging.DEBUG) # 文件记录所有级别日志
# --- 2. 控制台实时输出 Handler ---
console_handler = logging.StreamHandler() # 默认输出到 sys.stderr (控制台)
console_handler.setFormatter(formatter)
console_handler.setLevel(logging.INFO) # 控制台仅显示 INFO 及以上级别
# 将 Handler 添加到 Logger
logger.addHandler(file_handler)
logger.addHandler(console_handler)
return logger
logger = setup_logger()
# 配置 CORS 中间件
app.add_middleware(
@@ -125,16 +159,16 @@ async def log_requests(request: Request, call_next):
is_file_upload = request.headers.get("content-type", "").startswith("multipart/form-data")
# 记录接收的请求数据
logging.info(f"Received request: {request.method} {request.url} at {request_time_str}")
logger.info(f"Received request: {request.method} {request.url} at {request_time_str}")
if not is_file_upload:
request_body = await request.body()
logging.info(f"Request body: {request_body.decode('utf-8')}")
logger.info(f"Request body: {request_body.decode('utf-8')}")
# 创建新的 Request 对象,传递缓存的请求体
receive = await receive_with_body(request_body)
request = Request(request.scope, receive=receive)
else:
logging.info(f"Request body: File")
logger.info(f"Request body: File")
# 处理请求
response = await call_next(request)
@@ -151,9 +185,9 @@ async def log_requests(request: Request, call_next):
# 记录响应的状态码以及是否成功
success_status = response.status_code < 400
logging.info(f"Response status: {response.status_code} at {response_time_str}, success: {success_status}")
logger.info(f"Response status: {response.status_code} at {response_time_str}, success: {success_status}")
# logging.info(f"Response body: {response_body.decode('utf-8')}")
logging.info(f"Processing time: {processing_time:.3f} seconds")
logger.info(f"Processing time: {processing_time:.3f} seconds")
return response