CMS后台操作日志记录,记录管理员所有操作

CMS后台操作日志记录的核心目标只有一句话:管理员在后台点了什么、改了什么、什么时候做的,都要留下可查询的记录。
本文按零基础运维视角,讲清准备条件、分步操作、避坑和验证方法,适合使用宝塔面板或LNMP环境搭建CMS的站长。

先确认你的CMS是否已有日志入口

动手前先做一次排查,避免重复造轮子。
登录CMS后台,按以下路径查找:

  • 常见路径:系统 → 操作日志、日志管理、安全审计
  • 若存在日志菜单,先点击测试,确认能否记录“登录、新增、修改、删除”四类动作
  • 若没有菜单或记录为空,再按本文手动补充日志表

判断条件:后台已有且能正常写入的,不需要重建表;
只有缺失或记录不全时,才进入下一步。

建立操作日志数据表

在宝塔面板打开 数据库,进入CMS所用数据库,执行下面的建表SQL。
字段覆盖“谁、何时、在哪、做了什么、结果如何”:

CREATE TABLE cms_admin_log (
  id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
  admin_id INT UNSIGNED NOT NULL,
  admin_name VARCHAR(50) NOT NULL,
  action VARCHAR(50) NOT NULL,
  module VARCHAR(50) NOT NULL,
  detail TEXT,
  ip VARCHAR(45),
  created_at DATETIME DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

表建好后,在宝塔 数据库 页面点击 phpMyAdmin,确认 cms_admin_log 表出现在列表中,字段类型与上面一致。

让CMS在关键操作时写入日志

以常见PHP类CMS为例,找到后台控制器入口文件,通常在 application/admin/controller/ 目录下。
在登录、新增、编辑、删除的公共方法中插入写日志逻辑:

$log = [
  'admin_id'   => session('admin_id'),
  'admin_name' => session('admin_name'),
  'action'     => 'edit',
  'module'     => 'article',
  'detail'     => json_encode($params, JSON_UNESCAPED_UNICODE),
  'ip'         => request()->ip(),
];
db('cms_admin_log')->insert($log);

关键点:

  • action 建议固定为 login、add、edit、delete 几类,方便后续筛选
  • detail 记录修改前后的关键字段,不要记录密码等敏感内容
  • 写日志代码放在业务操作成功之后,失败操作也建议记录,便于排查

验证方式:在后台修改一篇文章标题,刷新日志表,应看到一条 action=edit 的新记录。

日志查询与保留策略

日志写入后,还要能查、能清。
推荐在后台加一个日志列表页,按时间倒序展示,支持按管理员和操作类型筛选。

保留策略建议:

  • 常规站点保留90天,安全要求高的保留180天以上
  • 每天凌晨用计划任务清理过期日志,宝塔路径:计划任务 → 添加任务 → Shell脚本
  • 清理命令示例:DELETE FROM cms_admin_log WHERE created_at < DATE_SUB(NOW(), INTERVAL 90 DAY);

结论:日志只写不清理会拖慢数据库,定期归档比无限保留更稳妥。

常见坑位与排查

  • 中文乱码:建表和连接字符集统一用 utf8mb4
  • 日志没写入:检查写日志代码是否在 return 之前,以及数据库账号是否有 INSERT 权限
  • IP记录为 ::1:这是本机IPv6回环,线上环境一般正常
  • 日志表增长过快:检查是否把查询类操作也记了进去,查询不建议写入
  • 后台删除管理员后日志查不到:日志表不要设外键级联删除,保留历史记录

效果验证清单

完成配置后,按下面清单逐项确认:

  1. 登录后台,日志表新增一条 action=login 记录
  2. 新增一篇文章,日志表新增 action=add 记录
  3. 删除一条数据,日志表保留删除记录且 detail 可读
  4. 用不同管理员账号操作,admin_name 能正确区分
  5. 计划任务执行后,过期日志被清理

如果以上都能通过,说明CMS后台操作日志记录已经可以覆盖管理员所有操作,后续排查误操作或安全事件时就有据可查。

常见疑问

日志表放在CMS主库会不会影响性能?

中小流量站点通常没问题。
若写入频繁,可单独建日志库或改用文件日志,再定期导入分析。

能不能只记录删除操作?

可以,但不建议。
登录和修改同样重要,只记删除会丢失大量审计线索。

日志被管理员自己删了怎么办?

日志表权限应与CMS业务账号分离,后台不提供物理删除入口,清理只走计划任务。

分享到:
上一篇
CMS对接企业微信,表单提交推送消息提醒
下一篇
宝塔面板网站伪静态一键复制,迁移站点使用
1
系统公告

关于香港云优质服务器IP地址更换的通知

尊敬的客户: 因原IP运营商大幅涨价,为避免成本转嫁至用户,我司决定更换IP服务商。本次更换后,您的续费价格将保持不变,且新IP网络质量与服务标准不受影响。新IP已分配至后台,即刻生效(更换的新IP都是香港原生IPv4)。 涉及 IP 段: 45.192.x.x 旧 IP 停用时间: 2026 年 12 月 1 日
服务中心
客服
在线客服
24小时为您服务
咨询
联系我们
联系我们,为您的业务提供专属服务。
24/7 技术支持
如果您遇到寻求进一步的帮助,请过工单与我们进行联系。
24/7 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意