wapadil/seedream4
3
1"""2简单的监控和日志系统3替换复杂的调试输出4"""5import time6import logging7from functools import wraps8from flask import request9 10 11# 配置日志12logging.basicConfig(13 level=logging.INFO,14 format='%(asctime)s - %(name)s - %(levelname)s - %(message)s'15)16logger = logging.getLogger('seedream')17 18 19def log_api_call(func):20 """API调用日志装饰器"""21 @wraps(func)22 def wrapper(*args, **kwargs):23 start_time = time.time()24 endpoint = request.endpoint25 method = request.method26 27 logger.info(f"API调用开始: {method} {endpoint}")28 29 try:30 result = func(*args, **kwargs)31 duration = time.time() - start_time32 logger.info(f"API调用成功: {method} {endpoint} - {duration:.2f}s")33 return result34 except Exception as e:35 duration = time.time() - start_time36 logger.error(f"API调用失败: {method} {endpoint} - {duration:.2f}s - {str(e)}")37 raise38 39 return wrapper40 41 42def log_generation_metrics(model_endpoint, prompt_length, image_count=0):43 """记录生成指标"""44 logger.info(45 f"生成请求: 模型={model_endpoint}, "46 f"提示长度={prompt_length}, 图片数量={image_count}"47 )48 49 50def log_error(error_type, error_message, context=None):51 """统一错误日志"""52 logger.error(f"{error_type}: {error_message}")53 if context:54 logger.error(f"上下文: {context}")55 56 57def log_request_id(request_id, action="generated", model=None, prompt=None):58 """59 明确记录 request_id 到日志60 用于后续从 Hugging Face Spaces 日志中提取和删除61 62 日志格式: [REQUEST_ID] {request_id} | action={action} | model={model}63 """64 log_parts = [f"[REQUEST_ID] {request_id}", f"action={action}"]65 66 if model:67 log_parts.append(f"model={model}")68 69 if prompt:70 # 截断过长的 prompt71 prompt_preview = prompt[:100] + "..." if len(prompt) > 100 else prompt72 log_parts.append(f"prompt={prompt_preview}")73 74 logger.info(" | ".join(log_parts))75 76 77def get_health_status():78 """获取健康状态"""79 return {80 'status': 'healthy',81 'timestamp': time.time(),82 'version': '2.0-optimized'83 }