自定义接口开发必读


 日志分析神器接口文档

 接口主要功能:

 1、获取线上日志所在目录下的所有日志文档名称

 2、获取指定日志内容

 

 接口安全说明:

 1、接口文档名为随机生成,以减少别有用心之人的随机试探(自定义接口时,可根据自身情况命名);

 2、每次请求均需验证密钥(密钥为软件随机生成,无规律)

 

 自定义接口要求

 1、开发语言不限

 2、请求与返回参数类型为Json格式

 3、日志目录的绝对路径和密钥必须存在于代码中

 

 具体请求参数与返回数据参照如下:

 

 请求参数

 {
 verifycode : '5412ad5asdf4', //校验码(由软件生成后,赋值到自定义接口文档的密钥变量中,以便每次请求验证使用),
 retype : 'dir', //请求类型('dir':请求目录, 'cont':请求日志内容),
 logfile : 'www-2023-01-01.log', //日志文档名(请求日志内容时必填,包含格式),
 position : 0, //读取文档起始位置(请求日志内容时必填)
 limit : 1000, //获取条数(请求日志内容时必填)
 }

 

 返回参数(Json):

 {
 'status':0, //返回状态码 ( 0:失败,200:成功)
 'data':[], //数据数组 (目录:[['日志名称.log','file','日志大小字节'],***] 日志内容:['一行日志','再一行日志',***])
 'message':'' //返回状态提示语
 }


 

 其它说明:

 不清除的地方可参考以下PHP接口文档代码,每行均做了注释

  //============PHP代码实列==========================

//日志目录绝对路径
$logDir = '{!-logdir-}';
//密钥
$verifyCode = '{!-verifycode-}';
//默认返回数据格式
$reArr = ['status'=>0,'data'=>[],'message'=>''];
//接收参数(verifycode:校验码,retype:请求类型(dir,cont),logfile:日志文档名,position:读取文档起始位置,limit:获取条数
$paramArr = json_decode(file_get_contents('php://input'),true);
//密钥
$inputVerifyCode = isset($paramArr['verifycode'])?$paramArr['verifycode']:'';
if($inputVerifyCode!=$verifyCode){
    //验证密钥失败
    $reArr['message'] = '校验失败';
}else{
    $reArr['status']=200;//校验成功
    //请求类型
    $reType = isset($paramArr['retype'])?$paramArr['retype']:'';
    //请求目录
    if($reType=='dir'){
        $logFileList = [];
        //获取目录下的信息
        $dirList = scandir($logDir);
        //遍历目录
        foreach($dirList as $fileName){
            $newFilePath = $logDir.DIRECTORY_SEPARATOR.$fileName;
            //如果是文档则继续
            if(is_file($newFilePath)){
                //获取日志大小
                $logSize = filesize($newFilePath);
                //组合成特有格式,并追加到数组变量中
                $logFileList[] = array($fileName,'file',$logSize);
            }
        }
        $reArr['data'] = $logFileList;
        $reArr['message'] = '目录获取成功';
    //请求内容
    }else if($reType=='cont'){
		//获取参数
		$fileName = isset($paramArr['logfile'])?$paramArr['logfile']:''; 
		$position = isset($paramArr['position'])?$paramArr['position']:0;
		$limit = isset($paramArr['limit'])?$paramArr['limit']:0;
		$rContent = '';
		$contList = [];
		//组合新路径
		$newFilePath = $logDir.DIRECTORY_SEPARATOR.$fileName;
		//每次读取量,避免日志太大卡住
		$maxReadLen = 4194304;
		if(is_file($newFilePath)){
			$fo = fopen($newFilePath,'r');
			// 移动文件指针到指定位置  
			fseek($fo, $position); 
			while (!feof($fo)) {  
				// 每次读取4194304个字节 
				$content = fread($fo, $maxReadLen); 
				$rContent .= $content;
				//将内容以每行换行符处,转换为数组
				$contList = explode(PHP_EOL,$rContent);
				//如果超过获取量,则停止继续读取文档
				if($limit>0 and count($contList)>$limit){
					//截取数组,避免最后一条日志不完整
					$contList = array_slice($contList,0,$limit);
					break;
				}
			}
			fclose($fo);  // 关闭文件  
		}
		//获取当次获取总量
		$getTotal = strlen(implode(PHP_EOL,$contList));
		$reArr['total'] = $getTotal;
		//去除空元素列表
		$reArr['data'] = array_values(array_filter($contList));
		$reArr['message'] = '日志获取成功';
	}
}
//将数组转换为Json并输出
echo json_encode($reArr);
exit;



© 2023 日志分析神器软件 保留所有权利。