""" 日志格式化工具模块 ============================================================= 提供请求参数和返回结果的格式化工具,用于操作日志存储: - format_params: 格式化请求参数(过滤敏感字段) - format_result: 格式化返回结果 - truncate_json: 截断过长的JSON字符串 """ import json import logging logger = logging.getLogger(__name__) def format_params(params) -> str: """ 格式化请求参数,用于日志存储 将请求参数字典转换为JSON字符串,并过滤敏感信息。 Args: params: 请求参数(字典或其他类型) Returns: 格式化后的JSON字符串 """ if not params: return "" try: sensitive_fields = ['password', 'old_password', 'new_password', 'confirm_password'] if isinstance(params, dict): params_copy = params.copy() for field in sensitive_fields: if field in params_copy: params_copy[field] = '******' return json.dumps(params_copy, ensure_ascii=False) return json.dumps(params, ensure_ascii=False) except Exception: return str(params)[:500] def format_result(result): """ 格式化返回结果 将返回结果转换为适合存储的字符串格式,支持JsonResponse、字典等类型。 Args: result: 返回结果 Returns: 格式化后的结果字符串 """ if not result: return '' try: if hasattr(result, 'content') and result.content: content = result.content.decode('utf-8') if content: try: data = json.loads(content) result_str = json.dumps(data, ensure_ascii=False) except Exception: result_str = content if len(result_str) > 10000: result_str = truncate_json(result_str, 10000) return result_str return None elif isinstance(result, dict): result_str = json.dumps(result, ensure_ascii=False) if len(result_str) > 10000: result_str = truncate_json(result_str, 10000) return result_str else: result_str = str(result) if len(result_str) > 10000: result_str = truncate_json(result_str, 10000) return result_str except Exception as e: logger.error(f"格式化返回结果异常: {e}") return truncate_json(str(result), 10000) if result else '' def truncate_json(json_str, max_len): """ 截断JSON字符串 Args: json_str: JSON字符串 max_len: 最大长度 Returns: 截断后的字符串 """ if not json_str: return '' if len(json_str) <= max_len: return json_str return json_str[:max_len] + '...'