/**
* 输出json
* @param $msg
* @param int $errno
*/
public function printOutError($msg = '操作失败', $errno = 10099)
{
$result = [
'msg' => $msg,
'errno' => $errno
];
$param = $_POST ?: $_GET;
setlog($param, $result, CONTROLLER_NAME . '/' . ACTION_NAME, C('DB_NAME') . '_error.log');
$this->setErr($errno, $msg);
$this->Send();
} /**
* 输出json
* @param $msg
* @param int $errno
*/
public function E($msg = '操作失败', $errno = 10099)
{
$result = [
'msg' => $msg,
'errno' => $errno
];
$param = $_POST ?: $_GET;
setlog($param, $result, CONTROLLER_NAME . '/' . ACTION_NAME, C('DB_NAME') . '_error.log');
$this->setErr($errno, $msg);
$this->Send();
} /**
* 输出json
* @param array $out_data
* @param string $msg
* @param bool $force_out 强制展示结果
*/
public function printOutSuccess($out_data = [], $msg = '操作成功', $force_out = false)
{
$result = [
'msg' => $msg,
'data' => $out_data
];
$param = $_POST ?: $_GET;
setlog($param, $result, CONTROLLER_NAME . '/' . ACTION_NAME, C('DB_NAME') . '_success.log');
$this->setErr(0, $msg);
if ($out_data || $force_out) {
$this->setAttr('data', $out_data !== null ? $out_data : []); // null的时候返回空
}
$this->Send();
} /**
* 输出json
* @param array $out_data
* @param string $msg
* @param bool $force_out 强制展示结果
*/
public function S($out_data = [], $msg = '操作成功', $force_out = false)
{
$result = [
'msg' => $msg,
'data' => $out_data
];
$param = $_POST ?: $_GET;
setlog($param, $result, CONTROLLER_NAME . '/' . ACTION_NAME, C('DB_NAME') . '_success.log');
$this->setErr(0, $msg);
if ($out_data || $force_out) {
$this->setAttr('data', $out_data !== null ? $out_data : []); // null的时候返回空
}
$this->Send();
}
// 全局通用日志工具
function setlog($param = [],$result = [],$name='',$filename = 'm.log',$path = '/tmp/log/'){
// 没有目录则创建目录
if (!mkdir($path, 0777, true) && !is_dir($path)) {
throw new \RuntimeException(sprintf('目录 "%s" 创建失败', $path));
} // 目录,权限,递归 if ($result && $param) {
$arr = array(
'param' => $param,
'result' => $result,
'name' => $name,
'time' => date('Y-m-d H:i:s')
);
} else {
$arr = array(
'content' => $param ?:$result,
'name' => $name,
'time' => date('Y-m-d H:i:s')
);
} file_put_contents($path.$filename,var_export($arr,true).PHP_EOL,FILE_APPEND);
}

可以有效的记录,每个接口下的错误日志,参数与返回数据。

封装Json+日志的更多相关文章

  1. 使用Map List 封装json数据

    <dependency> <groupId>net.sf.json-lib</groupId> <artifactId>json-lib</art ...

  2. Web自动化框架之五一套完整demo的点点滴滴(excel功能案例参数化+业务功能分层设计+mysql数据存储封装+截图+日志+测试报告+对接缺陷管理系统+自动编译部署环境+自动验证false、error案例)

    标题很大,想说的很多,不知道从那开始~~直接步入正题吧 个人也是由于公司的人员的现状和项目的特殊情况,今年年中后开始折腾web自动化这块:整这个原因很简单,就是想能让自己偷点懒.也让减轻一点同事的苦力 ...

  3. 编写JsonResult封装JSON返回值(模板参阅)

    编写JsonResult封装JSON返回值 package cn.tedu.note.util; import java.io.Serializable; import cn.tedu.note.se ...

  4. HAproxy Json日志格式配置

    通过日志工作分析日志时,非json日志分析起来比较麻烦.通过以下的配置,可以让生成的日志为json. log-format {"haproxy_clientIP":"%c ...

  5. SpringBoot之封装json对象返回json数据

    /** * @description:封装json对象,所有返回结果都使用它 **/ public class Result<T> { private int code;// 业务自定义状 ...

  6. jquey ajax 将变量值封装json传入JAVA action获取解析

    最近在做一个小小的功能模块,前台有很多的数据需要传入到后台,前台页面设计如下: 看起来不是很清楚,总之表单中的数据都要提交到后台进行处理,然后插入到数据库,而且是一起提交到后台的,实现的方法大致有两种 ...

  7. flink---实时项目--day02-----1. 解析参数工具类 2. Flink工具类封装 3. 日志采集架构图 4. 测流输出 5. 将kafka中数据写入HDFS 6 KafkaProducer的使用 7 练习

    1. 解析参数工具类(ParameterTool) 该类提供了从不同数据源读取和解析程序参数的简单实用方法,其解析args时,只能支持单只参数. 用来解析main方法传入参数的工具类 public c ...

  8. Springboot单例模式实战封装json转换

    一.定义 保证一个类仅有一个实例,并提供一个全局访问点. 二.优点 (1)在内存里只有一个实例,减少了内存开销      (2)可以避免对资源的多重占用      (3)设置全局访问点,严格控制访问 ...

  9. ELK7.4.0分析nginx json日志

    ELK7.4.0单节点部署 环境准备 安装系统,数据盘设置为/srv 内核优化参考 我们需要创建elk专用的账号,并创建所需要的目录并授权 useradd elk; mkdir /srv/{app,d ...

随机推荐

  1. linux系列(十六):which命令

    1.命令格式: which 可执行文件名称 2.命令功能: which指令会在PATH变量指定的路径中,搜索某个系统命令的位置,并且返回第一个搜索结果. 3.命令参数: -n 指定文件名长度,指定的长 ...

  2. 洛谷P1419寻找段落

    题目 单调队列+前缀和 #include <bits/stdc++.h> #define N 101001 using namespace std; int n, s, t; int da ...

  3. TortoiseGIT提交

    Git最新版下载地址:https://gitforwindows.org/ TortoiseGit,Git客户端,32/64位最新版及对应的语言包下载地址:https://tortoisegit.or ...

  4. linux系统普通用户设置密码

    linux系统中如何给一个普通用户grindnt设置密码 一.新密码符合规则,用以下方式修改: #root用户直接更改gridnt密码,不需要输入旧密码 [root@subsname home]# p ...

  5. CodeForces - 1175D Array Splitting(数组划分+后缀和+贪心)

    You are given an array a1,a2,…,ana1,a2,…,an and an integer kk. You are asked to divide this array in ...

  6. JAVA RDD 介绍

    RDD 介绍 RDD,全称Resilient Distributed Datasets(弹性分布式数据集),是Spark最为核心的概念,是Spark对数据的抽象. RDD是分布式的元素集合,每个RDD ...

  7. PHP根据传入的经纬度,和距离范围,返回所有在距离范围内的经纬度的取值范围

    /** * 根据传入的经纬度,和距离范围,返回所有在距离范围内的经纬度的取值范围 * @param float $lng 经度 * @param float $lat 纬度 * @param floa ...

  8. nineoldandroids开源库

    Android3.0 推出AnimationAPI ,使用起来比较方便,但是不能再3.0以下版本中使用.nineoldandroids开源库可以在任意版本上使用,官网地址:http://nineold ...

  9. 优雅编写Python3 的62个小贴士

    iterable技巧 ▍1.创建一个数字序列(从0到10,间隔为2)   >>> range(0,10,2)[0, 2, 4, 6, 8] ▍2.对一串数字求和(从0到10,间隔为2 ...

  10. Python中的logging模块就这么用

    Python中的logging模块就这么用 1.日志日志一共分成5个等级,从低到高分别是:DEBUG INFO WARNING ERROR CRITICALDEBUG:详细的信息,通常只出现在诊断问题 ...