实例解析thinkphp怎么用中间件记录行为日志

本篇文章给大家带来了关于php的相关知识,其中主要根据示例来看一下使用中间件记录行为日志的问题,包括了使用日志通道暂存行为日志、使用定时任务将日志内容定时写入数据库等,下面一起来看一下,希望对大家有帮助。

实例解析thinkphp怎么用中间件记录行为日志

推荐学习:《PHP视频教程》

一、定义中间件

可以通过命令行指令快速生成中间件

php think make:middleware Behavior

在这里插入图片描述
这个指令会 app/middleware目录下面生成一个Behavior中间件。内容如下:

立即学习“PHP免费学习笔记(深入)”;

method());         $is_ajax = $request->isAjax();         $route = $request->pathinfo();         $req = $_REQUEST;         unset($req['s'],$req['_session']);           $req_data = $req ?  json_encode($req) : '';         $data = [               'admin_id' => $admin['id'],//操作人id               'admin_user' => $admin['user'],//操作人用户名               'route' => $route,//操作的路由地址               'method' => $method,//get/post               'req_tp' => $is_ajax ? 'ajax' : 'normal',               'req_data' => $req_data,    //get/post的数据               'ip' => getIp(),               'create_time' => time()         ];         //end         return $next($request);    }}

二、使用日志通道暂存行为日志

不建议将行为日志实时写入数据库给数据库造成不必要的压力. 我们先写入log文件缓存,定时存入数据库
提示:先阅读官方日志处理教程 https://www.kancloud.cn/manual/thinkphp6_0/1037616
日志处理

1.修改log配置文件

打开config/log.php ,在’channels’ => [] 最后加入一个记录行为日志的单独通道:

 // 其它日志通道配置 //行为日志 'behavior'    =>    [     'path'           => runtime_path().'behavior',  //日志存放目录     'type'    =>    'File',     'single' =>     'b',        //单一文件日志:文件名     'file_size'   => 1024*1024*10, //日志文件大小限制(超出会生成多个文件     'max_files' => 30,                  //文件最大数量     'realtime_write'    =>    false,    // 关闭实时写入 ],

2.注册全局中间件

打开app/middleware.php ,注册个行为日志全局中间件

<?php// 全局中间件定义文件return [    // 全局请求缓存    // thinkmiddlewareCheckRequestCache::class,    // 多语言加载    // thinkmiddlewareLoadLangPack::class,    // Session初始化    // thinkmiddlewareSessionInit::class    // 行为日志    appmiddlewareBehavior::class,   ];

3.测试能否成功生成日志

随便访问一个本项目页面,例如:http://www.tp6.com/index/index/test?a=1&b=2,看能否生成以下文件.
在这里插入图片描述
打开文件,数据已写入

{“time”:“2022-04-16T21:38:48+08:00”,“type”:“info”,“msg”:”{“admin_id”:888,“admin_user”:“fanchen”,“route”:“index/index/test”,“method”:“get”,“req_tp”:“normal”,“req_data”:”{“a”:“1”,“b”:“2”}”,“ip”:“127.0.0.1”,“create_time”:1650116328}”}

三、使用定时任务将日志内容定时写入数据库

1.新建一个api方法, 要求定时任务可以访问到

 /**     * 定时任务服务器定时将用户行为日志插入到数据库     * @return void     */    public function sync_behavior_log()    {        $path = runtime_path() . 'behavior/b.log';        $b_file = file_get_contents($path);        $b_arr = explode(PHP_EOL, $b_file);        $d = [];        foreach ($b_arr as $b) {            $data = json_decode($b, true);            if (!empty($data['msg'])) {                $d[] = json_decode($data['msg'], true);            }        }        if ($d) {            try {                Db::name('log_behavior')->insertAll($d);     //批量插入数据库                file_put_contents($path, '');       //清空文件日志                echo '采集用户行为日志成功' . count($d);            } catch (DbException $e) {                echo ($e->getMessage());            }        }    }

2.新建行为日志数据表log_behavior

SET NAMES utf8mb4;SET FOREIGN_KEY_CHECKS = 0;-- ------------------------------ Table structure for log_behavior-- ----------------------------DROP TABLE IF EXISTS `log_behavior`;CREATE TABLE `log_behavior`  (  `id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'ID',  `admin_id` int(11) NOT NULL DEFAULT 0 COMMENT '用户id',  `admin_user` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '' COMMENT '用户名',  `route` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '模块名称',  `method` enum('delete','put','post','get') CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT 'get' COMMENT '请求方式 1get 2post 3put 4delete',  `req_data` varchar(300) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '' COMMENT '请求数据',  `ip` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '' COMMENT '用户ip',  `create_time` int(11) NOT NULL DEFAULT 0 COMMENT '创建时间',  PRIMARY KEY (`id`) USING BTREE,  INDEX `uid`(`admin_id`) USING BTREE,  INDEX `admin_user`(`admin_user`) USING BTREE,  INDEX `route`(`route`) USING BTREE) ENGINE = InnoDB AUTO_INCREMENT = 3902195 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '行为日志' ROW_FORMAT = Compact;SET FOREIGN_KEY_CHECKS = 1;

3.新建定时任务

新建定时任务,定时访问步骤1的sync_behavior_log地址就行了, 建议5分钟1次

至此, 有用户访问时,数据表就会每隔一段时间就批量插入行为日志数据了

推荐学习:《PHP视频教程》

以上就是实例解析thinkphp怎么用中间件记录行为日志的详细内容,更多请关注创想鸟其它相关文章!

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

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年11月13日 04:29:36
下一篇 2025年11月13日 05:06:18

相关推荐

  • php框架的整理和补充

    选型应匹配项目需求,Laravel适合中大型应用,Symfony适合企业级定制,CodeIgniter和ThinkPHP适合小型或快速上线项目,需关注自动加载、日志分级、迁移分离、中间件顺序及微框架灵活使用,合理优化才能稳定支撑迭代。 PHP框架的选择和使用,关键不在数量多,而在是否匹配项目需求、团…

    2025年12月13日
    000
  • 宝塔怎么上传php源码_宝塔上传php源码配置与部署步骤【指南】

    创建网站环境:登录宝塔面板,添加站点并配置域名、PHP版本及数据库;2. 上传源码:通过文件管理器或FTP将PHP源码上传至网站根目录并解压;3. 配置权限与伪静态:设置runtime等目录权限为755或777,按框架选择伪静态规则;4. 完成安装:访问域名运行安装向导,导入数据库,删除instal…

    2025年12月13日
    000
  • ThinkPHP配置文件的方法

    ThinkPHP配置文件用于定义运行参数,存于config/目录下,按框架默认→应用公共→环境→运行时顺序加载覆盖,支持config()函数读写及.env多环境管理。 ThinkPHP 的配置文件主要用于定义应用运行时的各种参数,比如数据库连接、缓存驱动、调试模式等。核心配置通过 PHP 数组返回,…

    2025年12月13日
    000
  • 宝塔怎么安装php源码_宝塔安装php源码环境与步骤【教程】

    首先安装PHP环境,登录宝塔面板→软件商店→搜索PHP→选择版本安装;再添加网站并设置根目录与PHP关联;接着上传PHP源码至站点目录,确保index.php在根目录;然后调整PHP配置,修改内存、执行时间及禁用函数;最后根据框架设置伪静态规则,如ThinkPHP需添加rewrite规则并保存生效。…

    2025年12月13日
    000
  • 怎么用phpstudy安装php源码_用phpstudy安装php源码配置与法【教程】

    首先下载安装PhpStudy并选择合适路径,然后在面板中添加站点,设置域名和源码目录,选择PHP版本后保存;接着启动Apache或Nginx服务,浏览器访问对应域名或localhost端口即可运行PHP源码;通过修改php.ini可启用扩展、调整上传限制、开启错误显示,并支持伪静态规则,便于开发调试…

    2025年12月13日
    000
  • php中QPM框架是什么?

    目前PHP中并无公认的QPM框架,可能是对Laravel、ThinkPHP等主流框架的误写,或指代内部私有框架、工具缩写(如包管理脚本),亦或是极小众未被广泛认知的实验性项目。 QPM并不是PHP中广泛认知或主流的框架名称。目前在PHP社区中,并没有一个被官方认可或广泛使用的框架叫做“QPM”。可能…

    2025年12月13日
    000
  • php源码怎么进入后台_php源码进入后台入口与权限法【指南】

    1、通过常见路径如/admin.php或工具扫描尝试访问后台;2、分析源码路由配置定位真实入口;3、查询数据库获取或修改管理员凭证;4、利用漏洞篡改权限参数提升身份;5、检查.htaccess或代码中的IP限制规则并绕过。 如果您尝试访问某个PHP源码构建的网站后台,但无法找到登录入口或缺乏相应权限…

    2025年12月13日
    000
  • PHP之ThinkPHP有几种查询?

    ThinkPHP有5种核心查询方式:1.基础链式查询,2.原生SQL查询,3.视图查询,4.关联查询(含预加载),5.查询作用域;其中链式+关联+作用域覆盖90%以上需求。 ThinkPHP 的查询方式主要围绕模型(Model)和查询构建器(Query Builder)展开,常见且实用的有 5 种核…

    2025年12月13日
    000
  • php首页源码怎么找_php首页源码查找位置与定位法【技巧】

    首先检查网站根目录下的index.php等默认入口文件,查看是否包含首页输出或模板调用;若使用框架,则需查看路由配置文件(如web.php)中根路径’/’对应的控制器和方法,进而定位实际渲染逻辑;同时可通过服务器配置(如DirectoryIndex)确认默认首页文件;还可通过…

    2025年12月13日
    000
  • php中Quercus框架的安装

    Quercus是Java实现的PHP引擎,用于在Tomcat或Resin中运行PHP,适用于已有Java项目需集成少量PHP的场景,不支持PHP 7+且已停止维护,现代开发不推荐使用。 Quercus 并不是 PHP 的框架,而是 Caucho Technology 开发的一个 Java 实现的 P…

    2025年12月13日
    000
  • PHP中ThinkPHP的高级查询

    ThinkPHP高级查询支持多表关联、闭包动态条件、子查询及聚合统计。通过join链式调用实现灵活关联;闭包where按需拼接防SQL注入;子查询支持in/exist;group+聚合函数满足报表需求。 ThinkPHP 的高级查询主要体现在对复杂业务场景的支持上,比如多表关联、子查询、聚合统计、动…

    2025年12月13日
    000
  • 有php源码怎么搭建_有php源码搭建站点与配置法【指南】

    首先搭建PHP运行环境,安装Apache或Nginx、PHP及MySQL;随后将源码部署至Web服务器根目录并设置文件权限;接着配置数据库连接信息,确保程序可访问数据库;然后创建数据库并导入SQL文件以初始化数据结构;最后调整服务器配置,启用重写模块、设置默认首页并关闭错误显示以保障安全。 如果您已…

    2025年12月13日
    000
  • php源码怎么查杀后面_php源码查杀后门与清理技巧【方法】

    发现PHP源码中存在后门时,应立即采取措施清除恶意代码并加固系统安全。首先使用D盾、河马等Webshell查杀工具对网站目录进行全盘扫描,识别并隔离标记为“疑似Webshell”的高危文件;随后通过代码编辑器全局搜索eval、assert、system等危险函数,结合上下文分析其调用合理性,重点排查…

    2025年12月13日
    000
  • php源码怎么做_php源码做项目流程与实现法【教程】

    首先明确PHP项目开发需遵循系统化流程,具体包括:一、需求分析与规划,明确功能模块与技术栈;二、搭建本地环境,安装XAMPP等工具并配置服务;三、设计数据库结构,创建表并配置连接参数;四、按MVC模式组织代码,编写模型、控制器与视图文件;五、逐项实现注册登录、数据展示等功能模块;六、采用预处理语句、…

    2025年12月13日
    000
  • php消息队列的介绍

    消息队列是PHP中实现异步处理、流量削峰和系统解耦的关键技术,通过生产者将任务如发邮件、处理订单等放入队列,消费者后台逐步执行,提升系统稳定性和用户体验;常用实现方式包括Redis List、RabbitMQ、Kafka及ThinkPHP的think-queue扩展。 PHP消息队列不是什么神秘技术…

    2025年12月13日
    000
  • php直播源码怎么用_php直播源码用部署与播放设置【指南】

    部署PHP直播系统需先配置Linux服务器环境,安装Nginx、PHP 7.4+和MySQL,通过宝塔面板可简化流程;随后上传源码至网站根目录,解压后修改数据库配置文件并导入live.sql数据,设置运行目录为/public并配置伪静态;接着部署流媒体服务如SRS或Nginx-RTMP模块,配置推流…

    2025年12月13日
    000
  • php空间怎么上传网站源码_php空间上传网站源码步骤与法【技巧】

    上传网站源码到PHP空间需先确认PHP版本、扩展支持并创建数据库;2. 可通过FTP工具(如FileZilla)或主机控制面板上传压缩源码并解压至根目录;3. 最后通过浏览器访问域名完成安装向导,填写数据库信息,删除安装目录并设置文件权限即可运行网站。 上传网站源码到PHP空间是搭建网站的基础操作,…

    2025年12月13日
    000
  • php源码怎么更新缓存_php源码更新缓存配置与刷新步骤【技巧】

    修改PHP代码后页面未更新,需清除缓存。1、调整php.ini中OPcache配置并调用opcache_reset()刷新;2、重启Apache或Nginx+PHP-FPM服务;3、删除框架缓存文件或执行php artisan cache:clear等命令;4、运行composer dump-aut…

    2025年12月13日
    000
  • php源码源码怎么安装_用PHP环境安装源码步骤教程【教程】

    首先搭建PHP运行环境,选择XAMPP等工具安装并启动Apache和MySQL服务,将源码放入htdocs目录;接着配置数据库,通过phpMyAdmin创建数据库并导入.sql文件,修改config.php中的连接信息;然后设置uploads、cache等目录的可写权限为755或777;之后访问ht…

    2025年12月13日
    000
  • php怎么找源码_php找源码渠道与安全获取技巧

    可通过开源平台如GitHub、官方渠道、Composer、技术社区及本地服务器安全获取PHP源码。首先选择可信来源,优先下载高星项目或官网发布版本,并核对哈希值确保完整性;其次利用Composer安装依赖查看第三方库代码,或参与社区交流获取实战项目资源;最后可登录部署服务器直接浏览现有系统源码结构,…

    2025年12月13日
    000

发表回复

登录后才能评论
关注微信