This article brings you relevant knowledge aboutPHP. It mainly looks at the problem of using middleware to record behavior logs based on examples, including using log channels to temporarily store behavior logs, using Scheduled tasks regularly write log content to the database, etc. Let’s take a look at it. I hope it will be helpful to everyone.
##Recommended study: "PHP Video Tutorial"
php think make:middleware Behavior
This instruction will generate a Behavior middleware under the app/middleware directory. The content is as follows:
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); }}
Tips: Read the official log processing tutorial first https://www.kancloud.cn/manual/thinkphp6_0/1037616Log processing
Open config/log.php, add a separate channel for recording behavior logs at the end of 'channels' => []:2. Register global middleware// 其它日志通道配置 //行为日志 'behavior' => [ 'path' => runtime_path().'behavior', //日志存放目录 'type' => 'File', 'single' => 'b', //单一文件日志:文件名 'file_size' => 1024*1024*10, //日志文件大小限制(超出会生成多个文件 'max_files' => 30, //文件最大数量 'realtime_write' => false, // 关闭实时写入 ],Copy after login
Open app/middleware.php and register a behavior log global middleware3. Test whether the log can be successfully generated Visit any page of this project, for example: http://www.tp6.com/index/index/test?a=1&b=2, and see if the following files can be generated.Copy after login
Open the file ,The data has been written
{"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}"}
/** * 定时任务服务器定时将用户行为日志插入到数据库 * @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()); } } }
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;
PHP Video Tutorial"
The above is the detailed content of Example analysis: how thinkphp uses middleware to record behavior logs. For more information, please follow other related articles on the PHP Chinese website!