前端線上bug回顧—Sentry日志異常引起的故障

今天我們回顧這樣的一個線上bug,這個線上bug引起了整個拿去花產(chǎn)品的所有用戶的還款失敗菇篡,用戶在點擊還款按鈕的時候漩符,會提示:“出錯啦,請稍后再試”驱还。

這個bug同樣也導致我們的前端同事淚眼含珠嗜暴,測試同學梨花帶雨。

bug原因是在點擊還款按鈕的時候议蟆,調(diào)用了下面的代碼:

let summary = {}
try {
  summary = JSON.parse(payorderSummary);
} catch (e) {
  summary = {}
  Sentry.errorWithScope({
    level: 'fatal',
    tag: { msg: '跳轉(zhuǎn)C端支付錯誤' },
    err: e
  })
}

上面的 Sentry.errorWithScope 函數(shù)的作用闷沥,是將異常上報到sentry服務(wù)器中,不過因為大意咐容,Sentry.errorWithScope 這個函數(shù)的內(nèi)部代碼也會報錯往外拋異常狐赡,最終導致在上報異常的時候發(fā)生異常,影響外層的業(yè)務(wù)邏輯疟丙。

Sentry. errorWithScope 中是哪一行報了錯呢:

if (tag) Object.keys.map(key => /* 此處省略n行 */)

可以看出 Object.keys 是個方法,而不是數(shù)組鸟雏,所以沒有 map 方法享郊,因此會報錯。

這個bug其實反映了不少的問題:

第一孝鹊,Sentry.errorWithScope 的代碼實現(xiàn)炊琉,是我們開發(fā)拷貝另外一個項目組的同事的,因為其主要的功能是上報日志又活,跟業(yè)務(wù)無關(guān)苔咪,因此這種代碼應(yīng)該獨立出業(yè)務(wù)項目,做成一個npm包來使用柳骄。

第二团赏,上報異常的時候,我們發(fā)現(xiàn)耐薯,需要手動的在catch中填寫相對應(yīng)的上報代碼舔清,并不是非常的友好丝里,能不能使用自動化的方式,自動的幫助我們添加上報代碼呢体谒?答案是肯定的杯聚,我們可以利用babel插件來轉(zhuǎn)化我們的代碼,也就是說抒痒,當babel在轉(zhuǎn)化我們的代碼的時候幌绍,如果遇到catch,就自動的在catch下面添加Sentry上報異常的代碼:

try {
  const num = JSON.parse("123") // 這行會拋異常
} catch (e) {
  Sentry. errorWithScope(e) // 這行是通過babel插件轉(zhuǎn)化代碼時故响,自動添加的
  // 你的處理代碼
}

上面的插件已經(jīng)寫出來了傀广,只不過略微變通的一下,可以點擊查看并使用:babel-plugin-catch-log

這個插件會自動的識別出你代碼的catch語句被去,并且自動的加上一個收集異常的代碼:__elog.push(e)(紅框部分):

因此主儡,我們在使用Sentry進行日志上報的時候,就不需要在每個try...catch...中手動的添加捕獲代碼惨缆,只需要統(tǒng)一在某個地方定時監(jiān)控一下__elog數(shù)組糜值,如果里面有異常,就取出來上報:

setInterval(() => {
  const err = __elog.shift()
  Sentry. errorWithScope({err})
}, 1000)

總結(jié):通過babel-plugin-catch-log插件坯墨,可以自動收集和處理異常寂汇,減少人工參與,也避免了不必要的bug捣染。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末骄瓣,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子耍攘,更是在濱河造成了極大的恐慌榕栏,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,204評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蕾各,死亡現(xiàn)場離奇詭異扒磁,居然都是意外死亡,警方通過查閱死者的電腦和手機式曲,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,091評論 3 395
  • 文/潘曉璐 我一進店門妨托,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人吝羞,你說我怎么就攤上這事兰伤。” “怎么了钧排?”我有些...
    開封第一講書人閱讀 164,548評論 0 354
  • 文/不壞的土叔 我叫張陵敦腔,是天一觀的道長。 經(jīng)常有香客問我恨溜,道長会烙,這世上最難降的妖魔是什么臀防? 我笑而不...
    開封第一講書人閱讀 58,657評論 1 293
  • 正文 為了忘掉前任雄坪,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘把沼。我一直安慰自己啡直,他們只是感情好房官,可當我...
    茶點故事閱讀 67,689評論 6 392
  • 文/花漫 我一把揭開白布袖牙。 她就那樣靜靜地躺著,像睡著了一般沃缘。 火紅的嫁衣襯著肌膚如雪躯枢。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,554評論 1 305
  • 那天槐臀,我揣著相機與錄音锄蹂,去河邊找鬼。 笑死水慨,一個胖子當著我的面吹牛得糜,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播晰洒,決...
    沈念sama閱讀 40,302評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼朝抖,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了谍珊?” 一聲冷哼從身側(cè)響起治宣,我...
    開封第一講書人閱讀 39,216評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎砌滞,沒想到半個月后侮邀,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,661評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡贝润,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,851評論 3 336
  • 正文 我和宋清朗相戀三年豌拙,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片题暖。...
    茶點故事閱讀 39,977評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖捉超,靈堂內(nèi)的尸體忽然破棺而出胧卤,到底是詐尸還是另有隱情,我是刑警寧澤拼岳,帶...
    沈念sama閱讀 35,697評論 5 347
  • 正文 年R本政府宣布枝誊,位于F島的核電站,受9級特大地震影響惜纸,放射性物質(zhì)發(fā)生泄漏叶撒。R本人自食惡果不足惜绝骚,卻給世界環(huán)境...
    茶點故事閱讀 41,306評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望祠够。 院中可真熱鬧压汪,春花似錦、人聲如沸古瓤。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,898評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽落君。三九已至穿香,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間绎速,已是汗流浹背皮获。 一陣腳步聲響...
    開封第一講書人閱讀 33,019評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留纹冤,地道東北人洒宝。 一個月前我還...
    沈念sama閱讀 48,138評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像赵哲,于是被迫代替她去往敵國和親待德。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,927評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 本博客講講App異常監(jiān)控枫夺,每個app都要保證使用質(zhì)量将宪,這樣才能保住用戶量,所以對于應(yīng)用程序的監(jiān)控顯得尤為重要橡庞。想象...
    Hozan閱讀 9,303評論 5 12
  • 前言 半年前也寫過一篇babel的簡單使用文章较坛,當時看了下babel的文檔,但是很多地方還不理解扒最,所以文章里沒有怎...
    mercurygear閱讀 46,033評論 9 100
  • babel 7 的使用的個人理解 最近看了很多關(guān)于babel的使用方法丑勤,大部分在一些點上都沒有說明白,同時給出的代...
    zshawk1982閱讀 21,021評論 14 43
  • 1吧趣、最觸動自己的段落原文 在成長中學習 ”不僅是合理的 法竞,也是與孩子同步成長所必需的 。 “在成長中學習 ”意味著...
    木木me閱讀 281評論 0 0
  • 3月17日强挫,九點開館營業(yè)岔霸。望各位同學、朋友俯渤、同仁蒞臨指導呆细。 開館優(yōu)惠 1.來館均送陶器自制一件,其余素坯均半價銷售...
    無盡畫館閱讀 1,533評論 0 1