项目是thinkphp5开发的app接口,在原本的基础上接入Mongo作为日志记录下用户请求和返回参数
在考虑到做最小的改动,这里使用到切面切入的方法,在行为类中挂载记录日志行为即可。
项目文件 /application/tags.php 在应用结束的位置添加行为类
<?php
// +----------------------------------------------------------------------
// | ThinkPHP [ WE CAN DO IT JUST THINK ]
// +----------------------------------------------------------------------
// | Copyright (c) 2006~2018 http://thinkphp.cn All rights reserved.
// +----------------------------------------------------------------------
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
// +----------------------------------------------------------------------
// | Author: liu21st <liu21st@gmail.com>
// +----------------------------------------------------------------------
// 应用行为扩展定义文件
return [
// 应用初始化
'app_init' => [],
// 应用开始
'app_begin' => [],
// 模块初始化
'module_init' => [],
// 操作开始执行
'action_begin' => [],
// 视图内容过滤
'view_filter' => [],
// 日志写入
'log_write' => [],
// 应用结束
'app_end' => [
'app\\index\\behavior\\MongoLog'
],
];
在项目 index 模块中建立 behavior 文件,并新建 MongoLog 类文件
在文件中的目录和自己实际的目录对应即可
<?php
/**
* Created by PhpStorm.
* User: long
* Date: 2018/8/17
* Time: 16:05
*/
namespace app\index\behavior;
use think\Db;
class MongoLog
{
/**
* 记录日志
* @param $data
*/
public function run(&$data)
{
$data = is_object($data) ? $data : (object)$data;
$now_time = time();
$mongo_config = config('auth_' . check_env() . '.MONGO');
$log_data = [
'method' => request()->controller() . '/' . request()->action(),
'header_data' => (request()->header()),
'param_data' => (request()->param()),
'return_data' => ($data->getData()),
'add_date' => date('Y-m-d H:i:s', $now_time),
'add_time' => $now_time,
];
try {
Db::connect($mongo_config)->name('api_log')->insert($log_data);
} catch (\Exception $exception) {
}
}
}
因为 thinkphp5 的行为类是挂载触发和自动触发,而我返回的 api 数据是 return json([]); 这种方式返回,所以在return 的时候是一个 obj 对象,而我需要做的就是把这个对象存入 MongoDb 即可
在开发时需要迁移几个环境,为了区分正式和测试的,所以我分别引入的不同文件。
还有一点就是,行为类是挂载上去的,为了防止 MongoDb 在记录时发生 MongoDb 记录失败,所以我在记录的时候使用的 try {...}catch(){...} 来捕获异常,并不做处理。或者记录到mysql日志中即可。
Mongo类库,我是使用的thinkphp5 官方整理好的类库。直接require 即可。
本篇文章就水到这里,要是文中哪里不对,或者有什么问题,可以私聊我。
好记性不如烂笔头,慢慢记录。
上一篇: PHP模拟OSS做图片异步处理...
糖糖(金牌售后) 2020-03-30 13:17 Win 7 广西壮族自治区桂林市