如何第一時間收到接口報錯捉片?不用測試妹子再質疑你是不是接口掛了平痰。

啥樣的后端程序員是好程序員?能機器做的事絕不自己做伍纫,哈哈宗雇。

場景復現(xiàn)

  • 客戶端:后端接口報錯了,我解析數(shù)據(jù)失敗莹规,你看看為啥赔蒲?
  • 服務端:好,我查查log良漱。你把請求參數(shù)給我打印出來舞虱。
  • 客戶端:我咋打印母市?
  • 服務端:....我還是自己查log吧
image.png

以上這種場景在開發(fā)中是不是時有發(fā)生矾兜?是不是很難頂?有啥好辦法讓debug更智能一點嗎患久?

分析

  • 不管哪個語言做服務端開發(fā)椅寺,一定有異常處理和日志。
  • 找到一個三方平臺蒋失,當捕獲到異撤蹬粒或者有新的打印日志時回調,推送錯誤日志給我們篙挽。
  • 經過一番調研之后荆萤,發(fā)現(xiàn)釘釘?shù)臋C器人是個好工作

說干就干,刷文檔铣卡,寫實現(xiàn)观腊。

后端實現(xiàn)以PHP的Laravel為例邑闲,其他語言也可以借鑒思路。

image.png

修改日志配置

<?php

use Monolog\Handler\NullHandler;
use Monolog\Handler\StreamHandler;
use Monolog\Handler\SyslogUdpHandler;

return [

    'default' => env('LOG_CHANNEL', 'stack'),

    'channels' => [
        'stack' => [
            'driver' => 'stack',
            //測試環(huán)境除了使用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
                ]
            ]);
    }
}

部署上線的效果

image.png

再也不用爬日志啦州邢!

測試妹子再找我說客戶端報錯數(shù)據(jù)解析錯誤儡陨,我也能馬上硬氣的回答:”應該是客戶端解析問題,服務端沒收到報錯量淌∑澹“

此處放一個機智的表情

image.png

參考文檔

歡迎大家評論、點贊呀枢、關注

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末胚股,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子裙秋,更是在濱河造成了極大的恐慌琅拌,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,490評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件摘刑,死亡現(xiàn)場離奇詭異进宝,居然都是意外死亡,警方通過查閱死者的電腦和手機枷恕,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,581評論 3 395
  • 文/潘曉璐 我一進店門党晋,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人徐块,你說我怎么就攤上這事未玻。” “怎么了胡控?”我有些...
    開封第一講書人閱讀 165,830評論 0 356
  • 文/不壞的土叔 我叫張陵扳剿,是天一觀的道長。 經常有香客問我铜犬,道長舞终,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,957評論 1 295
  • 正文 為了忘掉前任癣猾,我火速辦了婚禮敛劝,結果婚禮上,老公的妹妹穿的比我還像新娘纷宇。我一直安慰自己夸盟,他們只是感情好,可當我...
    茶點故事閱讀 67,974評論 6 393
  • 文/花漫 我一把揭開白布像捶。 她就那樣靜靜地躺著上陕,像睡著了一般桩砰。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上释簿,一...
    開封第一講書人閱讀 51,754評論 1 307
  • 那天亚隅,我揣著相機與錄音,去河邊找鬼庶溶。 笑死煮纵,一個胖子當著我的面吹牛,可吹牛的內容都是我干的偏螺。 我是一名探鬼主播行疏,決...
    沈念sama閱讀 40,464評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼套像!你這毒婦竟也來了酿联?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,357評論 0 276
  • 序言:老撾萬榮一對情侶失蹤夺巩,失蹤者是張志新(化名)和其女友劉穎贞让,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體劲够,經...
    沈念sama閱讀 45,847評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡震桶,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,995評論 3 338
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了征绎。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蹲姐。...
    茶點故事閱讀 40,137評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖人柿,靈堂內的尸體忽然破棺而出柴墩,到底是詐尸還是另有隱情,我是刑警寧澤凫岖,帶...
    沈念sama閱讀 35,819評論 5 346
  • 正文 年R本政府宣布江咳,位于F島的核電站,受9級特大地震影響哥放,放射性物質發(fā)生泄漏歼指。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,482評論 3 331
  • 文/蒙蒙 一甥雕、第九天 我趴在偏房一處隱蔽的房頂上張望踩身。 院中可真熱鬧,春花似錦社露、人聲如沸挟阻。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,023評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽附鸽。三九已至脱拼,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間坷备,已是汗流浹背熄浓。 一陣腳步聲響...
    開封第一講書人閱讀 33,149評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留省撑,地道東北人玉组。 一個月前我還...
    沈念sama閱讀 48,409評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像丁侄,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子朝巫,可洞房花燭夜當晚...
    茶點故事閱讀 45,086評論 2 355

推薦閱讀更多精彩內容

  • 用兩張圖告訴你鸿摇,為什么你的 App 會卡頓? - Android - 掘金 Cover 有什么料? 從這篇文章中你...
    hw1212閱讀 12,734評論 2 59
  • 校園失物招領平臺開發(fā) ——基于laravel框架構建最小內容管理系統(tǒng) 摘要 ? 針對目前大學校園人口密度大劈猿、人群活...
    藍蓮花xzsky閱讀 6,191評論 8 54
  • 在一個方法內部定義的變量都存儲在棧中拙吉,當這個函數(shù)運行結束后,其對應的棧就會被回收揪荣,此時筷黔,在其方法體中定義的變量將不...
    Y了個J閱讀 4,418評論 1 14
  • CDN訪問異常篇之502/503/504錯誤 一. 源站不通或源站域名無法解析 CDN 都是公網上的節(jié)點,CDN配...
    TimLi_51bb閱讀 8,003評論 0 1
  • 表情是什么仗颈,我認為表情就是表現(xiàn)出來的情緒佛舱。表情可以傳達很多信息。高興了當然就笑了挨决,難過就哭了请祖。兩者是相互影響密不可...
    Persistenc_6aea閱讀 125,147評論 2 7