最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • 如何第一时间收到接口报错?不用测试妹子再质疑你是不是接口挂了。

    正文概述 转载于:掘金(王中阳Go)   2021-07-19   355

    本文已参与好文召集令活动,点击查看:后端、大前端双赛道投稿,2万元奖池等你挑战!

    场景复现

    • 客户端:后端接口报错了,我解析数据失败,你看看为啥?
    • 服务端:好,我查查log。你把请求参数给我打印出来。
    • 客户端:我咋打印?
    • 服务端:....我还是自己查log吧

    如何第一时间收到接口报错?不用测试妹子再质疑你是不是接口挂了。

    分析

    • 不管哪个语言做服务端开发,一定有异常处理和日志。
    • 找到一个三方平台,当捕获到异常或者有新的打印日志时回调,推送错误日志给我们。
    • 经过一番调研之后,发现钉钉的机器人是个好工作

    后端实现以php的Laravel为例,其他语言也可以借鉴思路。

    如何第一时间收到接口报错?不用测试妹子再质疑你是不是接口挂了。

    修改日志配置

    <?php
    
    use Monolog\Handler\NullHandler;
    use Monolog\Handler\StreamHandler;
    use Monolog\Handler\SyslogUdpHandler;
    
    return [
    
        'default' => env('LOG_CHANNEL', 'stack'),
    
        'channels' => [
            'stack' => [
                'driver' => 'stack',
                //测试环境除了使用daily保存每天日志到logs/laravel.log,还使用’dingding‘channel
                'channels' => env("APP_ENV") == 'test' ? ['daily', 'dingding'] : ['daily'],
                'ignore_exceptions' => false,
            ],
            //配置钉钉 驱动选择 monolog 
            'dingding' => [
                'driver' => 'monolog',
                'level' => 'error',
                'handler' => \App\Handler\DingdingLogHandler::class,  //自定义handler
            ],
    
            'daily' => [
                'driver' => 'daily',
                'path' => storage_path('logs/laravel.log'),
                'level' => 'debug',
                'days' => 14,
            ],
      
            .
            .
            .
        ],
    
    ];
    
    

    上面不重要的代码使用3个竖向排列的.省略显示。

    自定义Handler

    <?php
    namespace App\Handler;
    
    use App\Library\CurlRequest;
    use App\Library\Utility;
    use Monolog\Logger;
    use Monolog\Handler;
    
    class DingdingLogHandler extends Handler\AbstractProcessingHandler
    {
        private $apiKey;
        private $channel;
    
        public function __construct(
            $level = Logger::DEBUG,
            bool $bubble = true
        ) {
            parent::__construct($level, $bubble);
    
    
        }
    
        protected function write(array $record): void
        {
            $this->send($record['formatted']);
        }
    
    
        protected function send(string $message): void
        {
            $microSecond = Utility::getMicroSecond();
            $key = "xxxx";
            $hashString = hash_hmac("sha256", $microSecond ."\n" . $key, $key, true);
            $sign = urlencode(base64_encode($hashString));
    
            CurlRequest::post("https://oapi.dingtalk.com/robot/send?access_token=xxxxx&timestamp=".$microSecond."&sign=".$sign,
                [
                    "msgtype" => "text",
                    "at" => [
                        "atMobiles" => [
                            "xxxx",
                            "xxxx"
                        ]
                    ],
                    "text" => [
                        "content" => $message
                    ]
                ]);
        }
    }
    
    

    部署上线的效果

    如何第一时间收到接口报错?不用测试妹子再质疑你是不是接口挂了。

    再也不用爬日志啦!

    测试妹子再找我说客户端报错数据解析错误,我也能马上硬气的回答:”应该是客户端解析问题,服务端没收到报错。“

    此处放一个机智的表情

    如何第一时间收到接口报错?不用测试妹子再质疑你是不是接口挂了。

    参考文档

    • 日志相关参考文档 laravel中文文档 日志篇
    • 钉钉相关参考文档 钉钉机器人文档

    欢迎大家评论点赞关注。 掘金啥时候来个一键三连的功能呀


    起源地下载网 » 如何第一时间收到接口报错?不用测试妹子再质疑你是不是接口挂了。

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元