接口异常日志有助于开发者和使用者快速定位接口失败的原因,在一个项目中数据流量较大且使用的用户多因此我设计了一个异常日志插件用于记录异常数据。包括:日志入库和日志管理两个部分。
遇到的问题
有一个接口服务每天的异常率在0.5%左右,没有异常日志后期的对数据遇到了相当大的问题;
接口也有异常日志的,是基于TP5的日志机制,由于生成的文件较多查找比较麻烦;
解决办法
想通过增加一个日志插件的方式来解决此问题。
日志插入类CILog
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83
| <?php namespace ApiLog; use think\Exception; use think\Db;
/** * 接口日志文件 * @author letour * @module_name 日志指存放数据表 * @notice_header getsaleseats * @notice_body 说明性的文字,可以为空 * 2017-01-08 */ class CILog{
/* * 日志类型编码映射数组 * */ private static $LOGMAP = array ( 'ERR' => '系统错误日志', 'QUERY' => '信息查询', 'GETFROMSTATION' => '获取始发站数据', 'GETALLSTOPS' => '获取目的站点数据', 'GETSCHPLAN' => '获取班次信息', 'GETSCHPLANSEAT' => '获取班次信息(选座)', 'GETSALESEATS' => '获取可选座位信息(选座)', 'LOCK' => '锁座/解锁', 'APPLYORDER' => '售票', 'APPLYORDERSEAT' => '售票(选座)', 'CONFIRMORDER' => '订单确认', 'GETORDERSTATUS' => '订单状态查询', 'GETORDERS1' => '查询客运站某个订单', 'GETORDERTICKETS' => '客运站订单对应车票信息', 'RETURNT' => '退票', 'CANCELORDER' => '订单取消', 'GETTAKETICKETS' => '取票', 'GETORDERTAKETICKETS' => '取票查询', 'BADT' => '坏票', ); /* *日志写入数据库 * @params $data 日志数据 * */ public static function saveLog($data){ //数据库保存数据 try{ $RDb = Db::connect('db2'); $RDb->table('api_log')->insert($data); }catch (Exception $e){ //数据库操作异常 \think\Log::record($e->getMessage() . '业务日志数据库保存失败', 'error'); return false; } return true; } /* * 依据编码获取统一的类型信息 * @params $code 类型编码 * */ public static function get($code){ if(isset(self::$LOGMAP[$code])){ $msg = self::$LOGMAP[$code]; return $msg; } return '未定义类型'; } /* * 获取异常编码 * */ public static function getErrMap(){ $arr = array(); foreach (self::$LOGMAP as $key => $item){ array_push($arr,array('key'=>$key,'value'=>$item)); } return $arr; } /* * 获取异常编码 * */ public static function getErrMapArr(){ return self::$LOGMAP; } }
|
引入扩展类目录 extend
1 2
| // 系统插件目录 define('EXTEND_PATH', './extend/');
|
调用插件方法
1 2 3 4 5 6
| use ApiLog\CILog; //引用命名空间
//日志数据添加 $data = array(); CILog::saveLog($data);
|
后台管理日志查看