广告
返回顶部
首页 > 资讯 > 后端开发 > PHP编程 >thinkphp如何用中间件记录行为日志
  • 484
分享到

thinkphp如何用中间件记录行为日志

2023-06-30 14:06:40 484人浏览 独家记忆
摘要

这篇“thinkPHP如何用中间件记录行为日志”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“thinkphp如何用中间件记录

这篇“thinkPHP如何用中间件记录行为日志”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“thinkphp如何用中间件记录行为日志”文章吧。

一、定义中间件

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

php think make:middleware Behavior


这个指令会 app/middleware目录下面生成一个Behavior中间件。内容如下:

<?phpdeclare (strict_types = 1);namespace app\middleware;use think\facade\Log;class Behavior{        public function handle($request, \Closure $next)    {         //start 加入以下内容         $admin  =  get_admin_info();   //当前登录用户的信息,自己实现         $method = strtolower($request->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 [    // 全局请求缓存    // \think\middleware\CheckRequestCache::class,    // 多语言加载    // \think\middleware\LoadLangPack::class,    // Session初始化    // \think\middleware\SessionInit::class    // 行为日志    \app\middleware\Behavior::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方法, 要求定时任务可以访问到

     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次

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

以上就是关于“thinkphp如何用中间件记录行为日志”这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注编程网PHP编程频道。

--结束END--

本文标题: thinkphp如何用中间件记录行为日志

本文链接: https://www.lsjlt.com/news/329634.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • thinkphp如何用中间件记录行为日志
    这篇“thinkphp如何用中间件记录行为日志”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“thinkphp如何用中间件记录...
    99+
    2023-06-30
  • thinkphp6如何使用中间件记录行为日志
    目录前言一、定义中间件二、使用日志通道暂存行为日志1.修改log配置文件2.注册全局中间件3.测试能否成功生成日志三、使用定时任务将日志内容定时写入数据库1.新建一个api方法2.新...
    99+
    2023-03-24
    thinkphp6中间件 中间件记录行为日志 thinkphp6行为日志
  • PHP中的日志记录:如何记录您的应用程序行为?
    PHP中的日志记录:如何记录您的应用程序行为? 在开发应用程序时,我们经常需要记录应用程序的行为,以便在出现问题时进行分析和调试。日志记录是一种有效的方法,它可以记录应用程序的行为,例如错误、警告、信息等。在PHP中,我们可以使用各种日志记...
    99+
    2023-09-12
    日志 二维码 bash
  • laravel怎么使用中间件记录用户请求日志
    这篇文章主要讲解了“laravel怎么使用中间件记录用户请求日志”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“laravel怎么使用中间件记录用户请求日志”吧!一、创建中间件可以使用命令创建...
    99+
    2023-06-30
  • Go日志:如何在Spring项目中使用Git进行日志记录?
    日志记录是任何应用程序中必不可少的一部分,因为它可以帮助开发者定位并解决问题。在Go语言中,我们可以使用标准库中的log包来记录日志。但是,如果我们在一个Spring项目中使用Go语言进行开发,我们可能需要将日志记录到Git中,这样可以更...
    99+
    2023-08-05
    日志 spring git
  • 怎么使用webpack在日志中记录文件行号
    本文小编为大家详细介绍“怎么使用webpack在日志中记录文件行号”,内容详细,步骤清晰,细节处理妥当,希望这篇“怎么使用webpack在日志中记录文件行号”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。前言在做前...
    99+
    2023-07-04
  • ASP和NumPy如何进行日志记录?
    日志记录是软件开发中非常重要的一环,它可以帮助开发者快速定位程序中出现的问题。在ASP和NumPy中,如何进行日志记录呢?本文将为您详细介绍。 ASP中的日志记录 在ASP中,可以使用内置的日志对象来进行日志记录。该对象名为“Server...
    99+
    2023-09-19
    numy 同步 日志
  • 怎样使用Nodejs创建访问日志记录的中间件
    怎样使用Nodejs创建访问日志记录的中间件,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。中间件-访问日志目标利用中间件技术,写一个用来记录访...
    99+
    2022-10-19
  • Java中如何使用Git记录日志?
    Git是一种流行的版本控制工具,可以追踪代码的变化并记录代码的历史。Java开发者可以使用Git来管理项目,并使用Git记录项目的日志。本文将介绍如何在Java中使用Git记录日志。 一、Git的基本概念 在开始介绍如何在Java中使用G...
    99+
    2023-07-06
    git 日志 编程算法
  • Python中如何使用numpy记录日志?
    Python是一种广泛使用的编程语言,其强大的数据处理能力和丰富的第三方库使其成为数据科学和机器学习领域的首选语言。在这些应用程序中,记录日志是一个非常重要的任务,因为它可以帮助开发人员找到应用程序中的错误并进行适当的修复。在本文中,我们将...
    99+
    2023-08-10
    numpy 日志 linux
  • 如何在 Windows 中使用 ASP 日志记录 JavaScript 事件?
    ASP 日志记录是一个非常强大的功能,能够帮助您快速、准确地记录 JavaScript 事件。在 Windows 系统中,使用 ASP 日志记录 JavaScript 事件非常简单,只需要按照以下步骤操作即可。 步骤一:创建 ASP 文件 ...
    99+
    2023-09-22
    日志 javascript windows
  • Java中日志是如何记录的
    在Java中,日志是通过使用日志框架来记录的。常用的日志框架包括java.util.logging、log4j和logback。以下...
    99+
    2023-09-17
    Java
  • NAS中如何查看日志记录?
    系统记录记录TOS 系统的事件信息。TNAS 可储存10,000条事件记录,包括讯息、警告和错误。输入用户名和密码登录TOS系统; TOS 桌面 > 控制面板 > 系统状态 > 系统记录; 打开系统记录...
    99+
    2023-06-04
  • Python中如何正确记录日志?
    Python是一种高级编程语言,它被广泛应用于各种领域,包括Web开发、数据科学和人工智能等。在开发Python应用程序时,日志记录是一个重要的任务,它可以帮助开发人员跟踪应用程序的行为并排查错误。本文将介绍如何在Python中正确记录日志...
    99+
    2023-08-11
    日志 numy load
  • Python日志记录:如何在shell中进行调试?
    在Python编程中,调试是一个非常重要的步骤。调试可以帮助开发人员理解程序执行过程中的问题,并且可以帮助找到程序的错误。在Python中,日志记录是一个常见的调试技术。本文将介绍如何在shell中使用Python日志记录进行调试。 什么...
    99+
    2023-10-27
    path 日志 shell
  • Java中的日志记录是如何工作的?如何提高日志记录的效率?
    在Java应用程序中,日志记录是非常重要的,它能够帮助开发人员在应用程序运行期间获取关键信息,诊断应用程序的问题,并且帮助开发人员进行调试和性能优化。本文将介绍Java中的日志记录是如何工作的,并且探讨一些提高日志记录效率的技巧。 日志记...
    99+
    2023-09-13
    日志 数据类型 打包
  • C#中如何使用日志记录跟踪程序运行
    C#中如何使用日志记录跟踪程序运行,需要具体代码示例引言:在开发软件时,常常需要对程序运行情况进行跟踪和记录,以便在出现问题时能够准确找到问题所在。日志记录是一种重要的技术手段,可以记录程序的运行状态、错误信息和调试信息,以便进行异常定位和...
    99+
    2023-10-22
    跟踪 程序运行 C#: 日志记录
  • 如何自Spring Boot中使用Logback对日志进行记录
    这期内容当中小编将会给大家带来有关如何自Spring Boot中使用Logback对日志进行记录,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。为了测试我们新建两个类package com.xia...
    99+
    2023-05-31
    springboot logback
  • 如何使用logzero在Python中进行简单日志记录
    这篇文章主要介绍如何使用logzero在Python中进行简单日志记录,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!logzero 库使日志记录就像打印语句一样容易,是简单性的杰出代表。我不确定 logzero 的名...
    99+
    2023-06-16
  • 如何使用Java重定向日志接口记录日志?
    当我们开发一个Java应用程序时,记录日志是非常重要的一个环节。Java提供了多种日志框架,如Log4j、Logback等。其中,重定向日志接口是一种常用的记录日志的方式。 在这篇文章中,我们将介绍如何使用Java重定向日志接口记录日志。我...
    99+
    2023-11-05
    重定向 日志 接口
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作