debug(audit): 添加X光调试-追踪断点
This commit is contained in:
@ -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)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -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()
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user