seedream4 / monitoring.py
wapadil
[FEATURE] 增强日志系统 - 支持 request_id 追踪与清理
e58e0a8
"""
简单的监控和日志系统
替换复杂的调试输出
"""
import time
import logging
from functools import wraps
from flask import request
# 配置日志
logging.basicConfig(
level=logging.INFO,
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s'
)
logger = logging.getLogger('seedream')
def log_api_call(func):
"""API调用日志装饰器"""
@wraps(func)
def wrapper(*args, **kwargs):
start_time = time.time()
endpoint = request.endpoint
method = request.method
logger.info(f"API调用开始: {method} {endpoint}")
try:
result = func(*args, **kwargs)
duration = time.time() - start_time
logger.info(f"API调用成功: {method} {endpoint} - {duration:.2f}s")
return result
except Exception as e:
duration = time.time() - start_time
logger.error(f"API调用失败: {method} {endpoint} - {duration:.2f}s - {str(e)}")
raise
return wrapper
def log_generation_metrics(model_endpoint, prompt_length, image_count=0):
"""记录生成指标"""
logger.info(
f"生成请求: 模型={model_endpoint}, "
f"提示长度={prompt_length}, 图片数量={image_count}"
)
def log_error(error_type, error_message, context=None):
"""统一错误日志"""
logger.error(f"{error_type}: {error_message}")
if context:
logger.error(f"上下文: {context}")
def log_request_id(request_id, action="generated", model=None, prompt=None):
"""
明确记录 request_id 到日志
用于后续从 Hugging Face Spaces 日志中提取和删除
日志格式: [REQUEST_ID] {request_id} | action={action} | model={model}
"""
log_parts = [f"[REQUEST_ID] {request_id}", f"action={action}"]
if model:
log_parts.append(f"model={model}")
if prompt:
# 截断过长的 prompt
prompt_preview = prompt[:100] + "..." if len(prompt) > 100 else prompt
log_parts.append(f"prompt={prompt_preview}")
logger.info(" | ".join(log_parts))
def get_health_status():
"""获取健康状态"""
return {
'status': 'healthy',
'timestamp': time.time(),
'version': '2.0-optimized'
}