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

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

thinkphp6中间件中间件记录行为日志thinkphp6行为日志 2023-03-24 08:03:50 765人浏览 独家记忆
摘要

目录前言一、定义中间件二、使用日志通道暂存行为日志1.修改log配置文件2.注册全局中间件3.测试能否成功生成日志三、使用定时任务将日志内容定时写入数据库1.新建一个api方法2.新

前言

发现本站没有一个靠谱的tp6记录行为日志的教程,于是就整理了一下自己在项目中已经投入使用的行为日志中间件的详细配置步骤供大家参考

提示:先阅读官方中间件教程 https://www.kancloud.cn/manual/thinkPHP6_0/1037493

中间件

一、定义中间件

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

php think make:middleware Behavior

在这里插入图片描述

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

内容如下:

<?php
declare (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次

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

总结

写得比较简单粗暴, 有些地方需要自己实现, 比如获取登录用户信息…

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。

--结束END--

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

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

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

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

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

下载Word文档
猜你喜欢
  • thinkphp6如何使用中间件记录行为日志
    目录前言一、定义中间件二、使用日志通道暂存行为日志1.修改log配置文件2.注册全局中间件3.测试能否成功生成日志三、使用定时任务将日志内容定时写入数据库1.新建一个api方法2.新...
    99+
    2023-03-24
    thinkphp6中间件 中间件记录行为日志 thinkphp6行为日志
  • thinkphp如何用中间件记录行为日志
    这篇“thinkphp如何用中间件记录行为日志”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“thinkphp如何用中间件记录...
    99+
    2023-06-30
  • 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
  • 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
  • 怎样使用Nodejs创建访问日志记录的中间件
    怎样使用Nodejs创建访问日志记录的中间件,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。中间件-访问日志目标利用中间件技术,写一个用来记录访...
    99+
    2022-10-19
  • 如何在 Windows 中使用 ASP 日志记录 JavaScript 事件?
    ASP 日志记录是一个非常强大的功能,能够帮助您快速、准确地记录 JavaScript 事件。在 Windows 系统中,使用 ASP 日志记录 JavaScript 事件非常简单,只需要按照以下步骤操作即可。 步骤一:创建 ASP 文件 ...
    99+
    2023-09-22
    日志 javascript windows
  • 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
    重定向 日志 接口
  • Spring Boot如何使用AOP记录日志
    小编给大家分享一下Spring Boot如何使用AOP记录日志,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!在项目开发中经常,日...
    99+
    2022-10-19
  • ASP.NET Core如何使用NLog记录日志
    这篇文章主要介绍了ASP.NET Core如何使用NLog记录日志,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。一、前言在所有的应用程序中,日志功能是不可或缺的模块...
    99+
    2023-06-29
  • Git记录:如何在Spring中使用Go日志?
    日志是软件开发中必不可少的一部分,它能够帮助开发者快速发现和解决问题。在Spring应用程序中,使用Go日志库可以提供更加高效和灵活的日志记录方式。本文将介绍如何在Spring中使用Go日志库,并演示如何记录不同级别的日志信息。 一、安装...
    99+
    2023-08-05
    日志 spring git
  • Spring Boot如何使用logback、logstash、ELK记录日志文件
    这篇文章主要介绍Spring Boot如何使用logback、logstash、ELK记录日志文件,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!Spring Boot 下,尝试使用 log4j 记录日志到 logst...
    99+
    2023-05-30
    logback logstash spring
  • 在springboot中使用AOP进行全局日志记录
    目录前言1、 spring AOP 是什么?2、spring AOP 能做什么?3、spring AOP 我能用 AOP 解决什么问题?一、引入依赖,增加自定义注解1、引入 mave...
    99+
    2022-11-12
  • PHP编程技巧:如何在日志记录中使用文件?
    日志记录是在软件开发中非常重要的一个环节。它可以帮助我们追踪程序的运行情况,排除问题,更好地了解程序的运行状况。在PHP中,我们通常使用文件来记录日志。本文将介绍如何在日志记录中使用文件的PHP编程技巧。 一、创建日志文件 在使用文件记录...
    99+
    2023-06-18
    日志 编程算法 文件
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作