php CI框架异常报错通过钉钉自定义机器人发送

php CI框架异常报错通过钉钉自定义机器人发送


文章目录


前言

我们在项目开发中,经常会遇到自己测试接口没问题,上线之后就会测出各种问题,主要是因为我们开发的时候测试频率少了,接口参数都是合法,上线之后用户多了,各种参数,各种请求上来就会出现一些BUG,这时候我们不主动查看日志很难发现,所以收到需求需要把项目的所有抛出异常信息发送到钉钉


一、封装一个异常监测

这里因为我们使用的php CI框架,我列出我的代码

复制代码
class MY_Exceptions extends CI_Exceptions
{
    public function __construct()
    {
        parent::__construct();
        require_once APPPATH . 'libraries/DingDing.php';
    }

    public function show_exception($exception)
    {
        $errorMessage = $exception->getMessage();
        $errorFile = $exception->getFile();
        $errorLine = $exception->getLine();
        $errorTrace = $exception->getTraceAsString();

        // 构建要发送的错误信息字符串
        $errorDetails = "Error occurred in file $errorFile at line $errorLine:\n\n";
        $errorDetails .= "Error message: $errorMessage\n\n";
        $errorDetails .= "Stack trace:\n$errorTrace";
        DingDing::send_msg($errorDetails);
        parent::show_exception($exception);
    }
}

这里主要目的就是通过监测CI框架自己抛出的异常,我们在列出我们需要的异常信息,报错文件,代码行数,拼接成我们需要的信息之后再发送到钉钉,让我们好定位问题去解决

二、封装好钉钉信息发送

代码如下(示例):

复制代码
class DingDing
{
    const Sign_key = "xxxxxxxxxxxxxxxxxxxxxx";

    const Web_hook = "https://oapi.dingtalk.com/robot/send?access_token=xxxxxxxxxxxxxxxxxxxxxxxxxx";

    public static function send_msg($msg)
    {
        $times = time() * 1000;
        $sign_key = self::Sign_key;
        $sign = urlencode(base64_encode(hash_hmac('sha256', $times . "\n" . $sign_key, $sign_key, true)));
        $webhook_url = self::Web_hook . "&timestamp={$times}&sign={$sign}";
        $data = array('msgtype' => 'text', 'text' => array('content' => $msg));
        $data_string = json_encode($data);
        $result = self::posturl($webhook_url, $data_string);
    }

    public static function posturl($url , $data) {
        //启动一个CURL会话
        $ch = curl_init();

        // 设置curl允许执行的最长秒数
        curl_setopt($ch, CURLOPT_TIMEOUT, 120);
        curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,false);
        curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,false);
        // 获取的信息以文件流的形式返回,而不是直接输出。
        curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);

        //发送一个常规的POST请求。
        curl_setopt($ch, CURLOPT_POST, 1);
        curl_setopt($ch, CURLOPT_URL, $url);
        //要传送的所有数据
        curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
        curl_setopt($ch, CURLOPT_HTTPHEADER, array(
                'Content-Type: application/json; charset=utf-8',
                'Content-Length: ' . strlen($data))
        );

        // 执行操作
        $res = curl_exec($ch);
        /*echo '>>>>>>';
        var_dump($res);
        echo '<<<<<<';*/
        if ($res == NULL) {
            curl_close($ch);
            return false;
        } else if(curl_getinfo($ch, CURLINFO_HTTP_CODE) != "200") {
            curl_close($ch);
            return false;
        }

        curl_close($ch);
        return $res;
    }
}

钉钉机器人的相关参数自己去创建申请,然后所有功能就完成了

总结

文章主要用到框架自带的异常抛出,和钉钉机器人发送消息的使用功能,代码大家对比自己项目修改就可以直接使用了,希望能帮到你

相关推荐
死磕音视频4 小时前
让小模型做选择题:限定候选项并读取 logits 概率的入门实践(附 Python 代码)
开发语言·python·大模型·文本分类·transformers
品牌常新4 小时前
景区巡逻机器人怎么选?派宝S5全地形守护解析
运维·人工智能·机器人
北京中科新远科技5 小时前
高速光模块上线验收实战:DOM、FEC、BER与端口计数器怎么一起看
服务器·网络·php
顽疲6 小时前
Java vue 养老系统源码详解:月账单 care_month_bill 与 Quartz 扣费 Job 实践
java·开发语言·vue.js·vue养老·springboot养老·java养老
Wang's Blog6 小时前
Java 项目实战: 交友项目 - 安装开发工具与环境准备
java·开发语言·交友
kyle~8 小时前
实时系统通信抖动(Jitter)
计算机视觉·机器人·接口隔离原则·传感器
程序喵大人8 小时前
【C++入门】编译链接模型 - 07 链接器怎样把符号对上号
开发语言·c++·编译器·编译链接·链接器
猫先生Mr.Mao8 小时前
具身智能之京东 WLA³详解:用世界状态转换统一人类视频和机器人动作
机器人·论文解读·具身智能·vla·京东·wla3
微三云 - 廖会灵 (私域系统开发)8 小时前
供应链系统实战:多渠道订单聚合与分布式库存一致性方案总结
开发语言·分布式·php
学逆向的9 小时前
C 数据溢出与精度丢失
c语言·开发语言·网络安全