laravel怎么实现用户操作日志记录_laravel用户操作日志记录实现

通过模型观察者、事件监听器和中间件三种方式实现Laravel操作日志记录,首先创建UserActionLog模型并迁移数据表,利用UserActivityObserver监听用户模型的增删改行为并写入日志;其次定义UserPerformedAction事件与LogUserAction监听器,支持异步队列处理复杂场景下的日志记录;最后通过LogUserActivity中间件拦截请求,记录用户访问路径、IP、操作时间等信息,并结合手动调用确保关键操作可审计,三者结合实现全面、灵活、可维护的日志系统。

laravel怎么实现用户操作日志记录_laravel用户操作日志记录实现

如果您希望在 Laravel 应用中记录用户对系统资源的修改行为,例如创建、更新或删除操作,可以通过事件监听与模型观察者机制实现自动化日志收集。这种机制能够帮助开发者追踪用户行为,便于后期审计和问题排查。

本文运行环境:MacBook Pro,macOS Sonoma

一、使用模型观察者记录操作日志

模型观察者允许您将 Eloquent 模型的事件处理逻辑分离到独立的类中,使代码更清晰且易于维护。通过监听模型的 created、updated、deleted 等事件,可以捕获用户的具体操作并写入日志表。

1、执行 Artisan 命令生成日志模型和迁移文件:
php artisan make:model UserActionLog -m

2、编辑生成的迁移文件,在 up 方法中定义日志字段:

user_id、action_type、model_name、record_id、changes、ip_address、user_agent 是关键字段,应包含在迁移中。

3、运行迁移命令创建数据表:
php artisan migrate

4、创建观察者类:
php artisan make:observer UserActivityObserver --model=User

5、在生成的观察者类中实现 created、updated、deleted 方法,向 UserActionLog 写入相应记录。

6、在服务提供者如 AppServiceProvider 的 boot 方法中注册观察者:
User::observe(UserActivityObserver::class);

二、利用 Laravel 事件与监听器机制

Laravel 提供了强大的事件广播系统,您可以自定义事件并在监听器中处理日志写入逻辑。这种方式更适合复杂业务场景,支持解耦和异步处理。

1、定义一个事件类用于触发操作日志记录:
php artisan make:event UserPerformedAction

2、在事件类构造函数中接收用户、操作类型、目标模型及变更数据等参数。

火龙果写作 火龙果写作

用火龙果,轻松写作,通过校对、改写、扩展等功能实现高质量内容生产。

火龙果写作 106 查看详情 火龙果写作

3、创建对应的监听器:
php artisan make:listener LogUserAction --queue

4、在监听器的 handle 方法中实例化 UserActionLog 并保存日志信息。

5、在需要记录的地方分发事件:
event(new UserPerformedAction($user, 'update', $model, $changes));

6、为提升性能,可将监听器设置为队列任务,在配置中启用 shouldQueue 属性。

三、通过中间件记录路由访问日志

中间件可用于拦截 HTTP 请求,在请求进入控制器之前或之后执行日志记录操作。适用于记录页面访问、API 调用等行为。

1、创建自定义中间件:
php artisan make:middleware LogUserActivity

2、将中间件注册到 Kernel.php 的 $middlewareGroups 或单独命名使用。

3、在中间件的 handle 方法中获取当前用户(若已登录)、请求路径、请求方法、IP 地址等信息。

4、判断是否需要记录该请求(例如排除心跳检测接口),然后写入 UserActionLog 表。

5、对于敏感操作,可在控制器方法中手动调用日志服务进行精确控制。

6、确保中间件顺序正确,避免因前置认证中间件未执行导致用户信息为空。

以上就是laravel怎么实现用户操作日志记录_laravel用户操作日志记录实现的详细内容,更多请关注php中文网其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/418099.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年11月7日 08:30:24
下一篇 2025年11月7日 08:31:30

相关推荐

  • Python Tornado注册Nacos服务,健康实例数不稳定怎么办

    python项目注册nacos后,健康实例数不稳定的原因及解决方案 使用tornado框架注册服务到nacos,并每隔5秒发送心跳。但发现注册后页面上的健康实例数不稳定。 原因:尽管使用了v2版本的nacos api向nacos注册服务并发送心跳,但nacos版本为2.0,而v1版本才是正确的api…

    2025年12月13日
    000
  • Python项目Nacos注册失败,健康实例数不稳定怎么办?

    python项目注册nacos,健康实例数不稳定的原因分析 问题描述:使用tornado框架向2.0版本的nacos注册服务并发送心跳,但发现健康实例数在nacos管理页面上不稳定。 原因分析: 经过分析,原因在于使用了2.x版本的nacos api,而python sdk一直没有支持2.x版本。因…

    2025年12月13日
    000
  • Nacos实例数不稳定问题:如何解决Tornado框架下V2 API注册服务导致的实例数波动?

    nacos中实例数不稳定的原因 使用tornado框架向nacos 2.0版本注册服务时,可能会遇到实例数和健康实例数不稳定的问题。这主要是由于使用v2版本的api进行注册和心跳发送导致的。 解决方案 要解决此问题,需要将注册、发送心跳和注销接口都改为v1版本。这是因为目前官方尚未提供对2.x版本p…

    2025年12月13日
    000
  • Tornado下Nacos服务健康实例数不稳定怎么办?

    使用 Nacos 注册服务时健康实例数不稳定的常见原因 您使用 Tornado 框架将服务注册到 Nacos 2.0 版本,但观察到健康实例数的不稳定。以下是一些可能导致此问题的常见原因: 使用错误的 API 版本 您正在使用 V2 版本的 API 注册服务和发送心跳,但是却使用 V1 版本的 AP…

    2025年12月13日
    000
  • fonttools安装后命令不可用怎么办?

    fonttools 安装后命令不可用 问题: 安装了 fonttools 库后,在终端中输入 fonttools 命令时提示找不到该命令。如何解决? 答案: 重启终端:这可能是最简单的解决方案。有时,系统环境变量可能没有立即更新,重新启动终端可以强制更新。确认安装:使用 python -m pip …

    2025年12月13日
    000
  • 面向 C++98 程序员的 Python 中的 OOP 概念

    这里为 c++++98 程序员全面演示了 python 中的 oop 概念: 类定义和对象创建 python # privado por convenção: _underscore_simples# “realmente privado”: __underscore_duplo (name man…

    2025年12月13日
    000
  • 如何用极坐标系求解二重积分区域:x^2 + y^2

    二重积分问题求解 在二重积分的问题中,积分区域常常需要用极坐标系来表示,极坐标下的积分区域的范围也需要根据具体问题进行推导。 在本次问题中,题目要求求解的积分区域表示为 x^2 + y^2 (x – 1/2)^2 + (y – 1/2)^2 <= 1/2 其中圆心为 (1/2, 1/2),半径…

    2025年12月13日
    000
  • 二重积分角度范围为什么是-π/4 ≤ θ ≤ 3π/4?

    二重积分角度θ范围求解 在高等数学二重积分中,遇到了一道求解积分范围角度θ的问题。原题为: 求解二重积分 ∬[x^2+y^2 由于答案中给出的角度范围为 -π/4 ≤ θ ≤ 3π/4,而按照传统推导方法,圆形区域的积分范围通常为 0 ~ 2π。我们来探索这一差异的缘由。 原题中给定的不等式 x^2…

    2025年12月13日
    000
  • 使用 IAMB 算法进行特征选择:浅谈机器学习

    所以,故事是这样的——我最近完成了庄教授的一项学校作业,其中涉及一种非常酷的算法,称为增量关联马尔可夫毯子(iamb)。现在,我没有数据科学或统计学的背景,所以这对我来说是新领域,但我喜欢学习新东西。目标?使用iamb选择数据集中的特征并查看它如何影响机器学习模型的性能。 我们将回顾 iamb 算法…

    2025年12月13日
    000
  • macOS 上如何正确使用 virtualenv 创建虚拟环境?

    虚拟环境安装后的使用指南 在 macos 中安装 virtualenv 后,您可能会遇到无法使用它的情况。以下是原因和解决方法: 解决无法使用 virtualenv 问题 与问题的提示不同,您不应使用“virtualenv”命令,原因如下: macos 的 python 3 默认包含了 venv 模…

    2025年12月13日
    000
  • Flask 中如何使用装饰器模拟 Laravel 框架的中间件?

    flask 中如何使用中间件拦截请求,模拟 php laravel 框架 在 php laravel 框架中,中间件是一种在请求到达控制器之前执行的类。它允许开发者在请求处理过程中注入额外的逻辑,例如身份验证、授权或其他自定义操作。 在 python 的 flask 框架中,我们可以使用装饰器来模拟…

    2025年12月13日
    000
  • Python 如何创建跨平台桌面应用程序?

    Python 创建跨平台桌面应用程序的理想库 Python 以其强大的功能性和广泛的库而闻名,包括一些适用于开发跨平台桌面应用程序的库。 跨平台 GUI 选项 要创建能在 Windows 和 Linux 上运行的桌面应用程序,Python 有以下几个跨平台 GUI 库: 立即学习“Python免费学…

    2025年12月13日
    000
  • 如何在 Flask 框架中实现请求拦截?

    python 的 flask 框架实现请求拦截 要在 flask 框架中实现类似 php laravel 中的中间件对请求拦截,可以使用装饰器来实现。 以检查用户认证为例,可以编写一个 check_auth 装饰器,在每次请求处理之前执行。如果用户未通过认证,则返回 401 未授权错误。 代码示例如…

    2025年12月13日
    000
  • macOS下virtualenv无法使用,如何正确创建和激活虚拟环境?

    在 macos 中使用 virtualenv 问题: 我在 macos 中安装了 virtualenv,但无法使用它。我按照以下步骤安装: python3 -m pip install –user virtualenv 但是当我使用 virtualenv 时,我得到了以下错误:“zsh: comm…

    2025年12月13日
    000
  • 如何使用 Python Flask 框架拦截请求?

    python 的 flask 框架如何拦截请求 在 python 中的 flask 框架中,可以使用装饰器来拦截请求,实现类似于 php laravel 框架中的中间件功能。 实现方法: 下面提供了一个使用装饰器的示例: 立即学习“Python免费学习笔记(深入)”; app = Flask(__n…

    2025年12月13日
    000
  • 如何在 Python Flask 框架中实现类似 Laravel 中间件的请求拦截功能?

    如何在 python flask 框架中像 php laravel 框架那样以中间件方式拦截请求 在 web 开发中,中间件是一种在请求处理前或后执行的一段代码,它可以用于验证授权、日志记录或其他预定义任务。 python flask 中的请求拦截 在 python flask 框架中,可以使用装饰…

    2025年12月13日
    000
  • Web 开发人员的 Python 入门

    python 已成为最流行的编程语言之一,广泛应用于 web 开发、数据分析、人工智能等领域。对于 web 开发人员来说,python 提供了强大的框架、简单的语法和充满活力的库生态系统。如果您是一名希望扩展到后端开发的 web 开发人员,python 是一个绝佳的选择。以下是如何开始。 作为 we…

    2025年12月13日
    000
  • Flask 框架中如何使用装饰器实现请求拦截?

    python 的 flask 框架如何实现请求拦截? flask 框架提供了多种机制来拦截和处理请求,其中装饰器是一个常见且简洁的方式。 问题:需要在某些路由上执行特殊操作,例如验证用户身份,否则报错。 答案:可以利用装饰器来实现这一需求。以下示例展示了如何使用 @app.before_reques…

    2025年12月13日
    000
  • Python 正则表达式中 findall 函数如何匹配小括号?

    正则匹配小括号的疑惑 python正则表达式中的findall函数用于查找字符串中指定模式的所有匹配项。它根据模式中是否有捕获组来返回不同的结果。 若模式中不含有捕获组(即括号),findall函数将返回匹配结果的列表。例如: my_sin = re.compile(r’sin(.+?)’, re.…

    2025年12月13日
    000
  • 正则表达式匹配小括号:如何只匹配函数名称,而不包括括号及其内容?

    正则表达式匹配小括号的奥秘 正则表达式用于从文本中匹配模式,而括号在其中扮演着至关重要的角色。当匹配小括号时,有以下问题需要考虑: 在上面的代码示例中,两个函数都用于匹配数学三角函数。第一个函数通过使用 .+? 匹配小括号内的内容,同时括号本身也包含在匹配结果中。第二个函数使用 (cos|sin|t…

    2025年12月13日
    000

发表回复

登录后才能评论
关注微信