資源描述:
《使用spring跟蹤應(yīng)用異常(1)-java開發(fā)java經(jīng)驗(yàn)技巧》由會員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在學(xué)術(shù)論文-天天文庫。
1、使用Spring跟蹤應(yīng)用異常(1)-編程開發(fā)技術(shù)使用Spring跟蹤應(yīng)用異常(1)木文由ImportNew■秋雙翻譯自captaindebugo歡迎加入翻譯小組。轉(zhuǎn)載請見文末要求。幾周以前,一個(gè)同事請我?guī)退?周的忙。他想要享受一個(gè)難得的假期,但是找不到其他人幫他。由于我剛完成一個(gè)特別復(fù)雜的編碼工作,需耍來點(diǎn)門我調(diào)節(jié),所以就答應(yīng)了他的請求。換換環(huán)境對我也是非常冇益的。那份工作的一部分是監(jiān)控一些非常關(guān)鍵的后臺運(yùn)行進(jìn)程,觀察它們是否運(yùn)行止?
2、JO開發(fā)者花了很多時(shí)間和精力在應(yīng)用中加入Fl志輸出,以此表明
3、應(yīng)用正常運(yùn)行。當(dāng)異常發(fā)生時(shí),可以知道究競出現(xiàn)了什么錯(cuò)誤。這些日志文件通??梢哉f明我們的應(yīng)用每天運(yùn)行究竟是正常的還是異常的。在這里,我將忽略其它技術(shù)。比如為應(yīng)用增加類似HTTP或JMX監(jiān)視器。這些技術(shù)提供的是應(yīng)用程序即吋信息,而不是木文討論的二級監(jiān)視結(jié)果。監(jiān)控日志文件通常有三種方式:1.從不檢查;2.被動(dòng)檢查;3.主動(dòng)檢查。從不檢查意味著那些應(yīng)用一直運(yùn)行從不停止,而且也不需要檢查。這一點(diǎn)我敢打賭。被動(dòng)檢查是很常見的。舉個(gè)例子,Smith太太打電話投訴當(dāng)她想要買一雙新鞋時(shí),網(wǎng)站就癱瘓了。她已經(jīng)支付了兩
4、次,但是從沒收到過鞋了。在這個(gè)傳統(tǒng)的公司中,開發(fā)者和運(yùn)維工程師是被完全隔離的。必須從運(yùn)維工程師獲得該問題發(fā)生吋的日志,開發(fā)者才能開始分析。但是從運(yùn)維那里返冋的往往是一些完全不相關(guān)的口志,接下來開發(fā)者不得不再次向他們索要日志,甚至如此反復(fù)多次。這個(gè)過程耗費(fèi)了兒周時(shí)間,Smith太太變得怒不可遏。最后,H志終于到了開發(fā)者手屮,問題解決。可能很多公司都像上面“被動(dòng)檢查”的場景屮描述的那樣,開發(fā)者不被信任或允許操作在線服務(wù)器。這種情況司空見慣,我們中的絕大部分人都遇到過這種情況。我們應(yīng)當(dāng)信任開發(fā)者去操作在
5、線系統(tǒng)。然而,作為一個(gè)開發(fā)者,在操作在線系統(tǒng)Z前,必須記住兩條黃金定律:1.不要停止任何東西;“主動(dòng)檢查”意味著檢查FI志文件要成為一個(gè)定期任務(wù):每天、每小時(shí)或其它間隔定期執(zhí)行。即使你的應(yīng)用包含了大量的JMX.http或其他監(jiān)視器,也不能確保一定會能發(fā)現(xiàn)每個(gè)問題。監(jiān)視器只能發(fā)現(xiàn)你設(shè)定問題,除此之外的其他任何問題都不會報(bào)告。再回到要我?guī)兔Φ膯栴},可能是歷史的或其他原因,通過手動(dòng)檢查日志文件來監(jiān)控系統(tǒng)運(yùn)行,通常要對一些文件進(jìn)行剪切或粘貼操作。這些重復(fù)的剪切和粘貼操作,每周大概會占用一個(gè)人半天的工作時(shí)間
6、。我非常不喜歡這些工作。我不善于這些需要手動(dòng)且易出錯(cuò)的重復(fù)無聊的工作。每周要消耗半天人力,所以將這項(xiàng)任務(wù)自動(dòng)化顯然更符合成本效益。只要時(shí)間不是花在追求完美的解決方案上。那么,有什么選擇呢?如果你看了FI志的規(guī)模,你一定會喜歡上Splunk,它能夠監(jiān)控多個(gè)消息源(譬如系統(tǒng)的日志守護(hù)進(jìn)程)的消息。這就意味著向Splunk發(fā)送錯(cuò)誤只是簡單地建立一個(gè)Logdj的系統(tǒng)日志附加器,不過那不是這篇闿文的范疇…最后,你需要寫一些shell腳本來完成一些類似于“gmp”命令的功能,將結(jié)果寫入文件,并將這些文件通過郵
7、件發(fā)送給你。開發(fā)一個(gè)基于Spring的app有多難?它需要包含一些盡可能通用的、可重用的類,能夠定期檢查錯(cuò)誤日志文件并將結(jié)果通過郵件發(fā)送給你。當(dāng)然,結(jié)果還是通過郵件發(fā)送比較好,因?yàn)槟憧偸菚?xí)慣性地查看你的郵箱。開始在其他類似的工程當(dāng)中,都面臨著如何邊出第一步的問題。要想讓這個(gè)工程發(fā)布,需要寫哪些類。有很多方法來確定你需要寫哪些類,譬如簡單地憑直覺,或者利用類似UML的設(shè)計(jì)工具,或者用快速原型或測試驅(qū)動(dòng)開發(fā)。在每種情況下,你真止要做的就是讓類名體現(xiàn)的功能滿足一些要求。例如,在這里我需要:1.搜索一個(gè)
8、給定的路徑和子路徑,找出某種特定類型的文件。2.檢查找到文件的時(shí)間,判斷是否有必要在這個(gè)文件屮搜索錯(cuò)課。3.時(shí)間滿足要求,則在其中查找界常。4.找到界常,則判斷是否是我們關(guān)注的,還是需要忽略它。5.如果異常是我們關(guān)注的,貝I」將其加到報(bào)告中。6.檢杳完所有文件后,形成待發(fā)布報(bào)告。7.通過郵件或其他方式發(fā)布報(bào)告。1.以上所有操作每天定時(shí)執(zhí)行。這些操作就形成了幾個(gè)類名:F訂eLocator>F訂eValidator>RegexValidator>FileAgeValidator和Reporto上述兒個(gè)
9、類名中包含了多次的“Validator”,意味著我們可以用一個(gè)接口,叫做“Validator"。利用接口的幾個(gè)實(shí)現(xiàn)來完成上面的驗(yàn)證工作。這些實(shí)現(xiàn)可以結(jié)合起來組成一個(gè)應(yīng)用。這只是一個(gè)初步的想法。如果你看了代碼,會發(fā)現(xiàn)沒有一個(gè)類名是Report,只冇一個(gè)Results類和重構(gòu)的Formatter接口、TextFonuatter和HtmlFonuatter類、Publisher接口和EmailPublisher類。為了讓任務(wù)定期執(zhí)行,有多種選擇。首先,需要將java代碼和調(diào)用它的腳木放在