yii日志审计系统核心是结构化、可追溯、带上下文的日志,依托bedezign/yii2-audit自动捕获请求、db变更等事件,并支持自定义打点、索引优化、权限隔离与敏感数据脱敏。

Yii开发日志审计系统,关键不在“记多少”,而在于“记得准、查得快、留得住”。核心是把操作行为转化为结构化、可追溯、带上下文的日志条目,而不是简单堆砌错误信息。
用 audit 扩展做基础埋点
bedezign/yii2-audit 是 Yii 生态中成熟度高、侵入性低的审计方案。它自动捕获 Web/CLI 请求、数据库变更(INSERT/UPDATE/DELETE)、用户登录登出等关键事件,无需手动调用 Yii::info()。
- 安装后只需在 config/main.php 中启用组件,配置数据库表前缀和保留周期
- 它会自动记录请求 URL、IP、User-Agent、执行 SQL(含参数值)、影响行数、前后数据快照(可选)
- 特别适合记录“谁在什么时候改了哪条数据”,满足等保2.0对操作审计的要求
自定义审计事件补充业务逻辑
框架级审计覆盖不了所有业务动作,比如“审批通过合同”“导出客户列表”“切换系统主题”。这时要用 Yii::$app->audit->info() 主动打点:
- 传入 category(如 'contract'、'export')便于分类检索
- data 参数支持数组,可塞入 contract_id、export_count、theme_name 等上下文字段
- 避免在循环里高频调用,批量操作建议合并为一条审计日志 + 附件说明
日志结构化存储与快速检索
审计日志不是写完就完,要能支撑事后回溯和统计分析:
- DbTarget 必须开启 logVars,确保 $_POST、$_GET、Yii::$app->user->id 等关键变量被序列化存入 extra_data 字段
- 为 audit_log 表添加复合索引:(category, created_at) 和 (user_id, created_at),加速按角色+时间范围查询
- 敏感操作(如删除、权限变更)建议额外写入独立表或打上 is_critical=1 标签,方便告警和重点审查
权限隔离与日志脱敏
审计日志本身是高敏感数据,必须控制访问边界:
- 后台审计模块仅对 admin 和 audit 角色开放,RBAC 中单独配置 audit/view 权限
- 展示时对 IP 做掩码处理(如 192.168.1.123 → 192.168.1.*),对手机号、身份证号字段自动脱敏
- 数据库目标启用 encryptionKey,对 extra_data 字段 AES 加密存储(需自行扩展 DbTarget)











