| """ |
| 简单的监控和日志系统 |
| 替换复杂的调试输出 |
| """ |
| 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_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' |
| } |