debug(audit): 添加X光调试-追踪断点

This commit is contained in:
DXC
2026-04-20 15:01:20 +08:00
parent 1c8def7e6f
commit decb7f5e1f
2 changed files with 21 additions and 2 deletions

View File

@ -98,6 +98,7 @@ def _store_audit_details(module, target_id, action, details):
'action': action, 'action': action,
'details': details 'details': details
} }
print(f"💾 [X光-存储] 已存入 g.audit_details, key: {key}, details: {details}")
# ============================================================ # ============================================================
@ -106,7 +107,10 @@ def _store_audit_details(module, target_id, action, details):
def before_update_listener(mapper, connection, target): def before_update_listener(mapper, connection, target):
"""SQLAlchemy before_update 监听器""" """SQLAlchemy before_update 监听器"""
print(f"🔔 [X光-监听器] before_update 被调用, target: {target.__class__.__name__}")
if not _is_audit_model(mapper): if not _is_audit_model(mapper):
print(f"⏭️ [X光-监听器] 跳过非审计模型: {mapper.class_.__name__}")
return return
# ★ 使用 inspect(target) 而非 inspector._instance_state(target) # ★ 使用 inspect(target) 而非 inspector._instance_state(target)
@ -125,13 +129,21 @@ def before_update_listener(mapper, connection, target):
'new': _serialize_value(new_val) 'new': _serialize_value(new_val)
} }
print(f"📊 [X光-监听器] 计算完成, changes: {changes}")
if changes: if changes:
module = _get_module_name(mapper) module = _get_module_name(mapper)
target_id, target_name = _extract_unique_key(target) target_id, target_name = _extract_unique_key(target)
# ★ 将变更存入 g # ★ 将变更存入 g
details = {'changes': changes} details = {'changes': changes}
# ★ X光调试确认监听器是否成功算出 changes
print(f"🚀 [X光-监听器] 成功触发! target: {target}, changes: {changes}")
_store_audit_details(module, target_id, 'update', details) _store_audit_details(module, target_id, 'update', details)
else:
print(f"⚠️ [X光-监听器] 无变更,跳过")
def before_delete_listener(mapper, connection, target): def before_delete_listener(mapper, connection, target):
@ -155,6 +167,7 @@ def before_delete_listener(mapper, connection, target):
# ★ 将删除快照存入 g # ★ 将删除快照存入 g
details = {'deleted_snapshot': deleted_snapshot} details = {'deleted_snapshot': deleted_snapshot}
print(f"🗑️ [X光-监听器] delete 触发, target_id: {target_id}")
_store_audit_details(module, target_id, 'delete', details) _store_audit_details(module, target_id, 'delete', details)
@ -178,6 +191,7 @@ def after_insert_listener(mapper, connection, target):
# ★ 将新增数据存入 g # ★ 将新增数据存入 g
details = {'created': new_snapshot} details = {'created': new_snapshot}
print(f" [X光-监听器] insert 触发, target_id: {target_id}")
_store_audit_details(module, target_id, 'create', details) _store_audit_details(module, target_id, 'create', details)

View File

@ -319,6 +319,8 @@ def audit_log(module: str, action: str = None, get_target_id_fn=None, get_target
break break
# 保存日志(统一入库) # 保存日志(统一入库)
print(f"📥 [X光-装饰器] 准备入库! details: {details}, g.audit_details: {getattr(g, 'audit_details', 'NOT_FOUND')}")
log_entry = AuditLog( log_entry = AuditLog(
user_id=user_id, user_id=user_id,
username=username, username=username,
@ -338,6 +340,9 @@ def audit_log(module: str, action: str = None, get_target_id_fn=None, get_target
db.session.commit() db.session.commit()
except Exception as e: except Exception as e:
import traceback
traceback.print_exc()
print(f"💥 [X光-崩溃] 审计入库失败原因: {str(e)}")
current_app.logger.error(f"审计日志记录失败: {str(e)}") current_app.logger.error(f"审计日志记录失败: {str(e)}")
db.session.rollback() db.session.rollback()