自動抓error log併發送郵件通知

日誌表很是具有參考價值,有時候UI上風平浪靜,看似正常,後臺日誌表裏風起雲涌error一堆堆。測試人員在驗證某個功能時有時候會忘記去查對應的日誌表。

所以TruView核心工程組組的Delivery Lead要求測試人員每天查詢固定的5張log表,將各個表的error log彙總(繪製成5個表格)然後郵件給團隊。由於每天的error log會有重複,並且今天查到某個ID(截止到某個ID)要記錄下來,明天接着這個ID往後查。我覺得是個挺繁瑣的活兒,於是花了兩天時間寫了個工具(java + maven)來做這些事兒。

首先,我設計了一個Excel表格形式的配置文件

  • SQL Query: 第一個sheet裏定義各個表的query語句(不接受select * from…寫明具體要看哪些column),並且定義基於哪個column來排除重複的記錄。Query的where子句第一個條件就是[datetime] > dateadd(d, [dateadd], getdate()),其中**[dateadd]**是一個關鍵字,代碼會根據今天是禮拜一還是別的來將它替換成-3或者-1,也就是說禮拜一查詢前3天的,別的工作日查詢前一天的
  • DB Conn:第二個sheet裏定義要連接的DB及用戶名和密碼(加密後的密碼)
  • 收件人列表

工具的構成大概如下:

  • apache poi讀配置文件,構建ToolConfig對象
  • JDBC連接數據庫,查詢error log
  • 根據ToolConfig對象的某些屬性構建EmailUtil對象,然後基於EmailTemplate.html + DB查詢結果來生成html格式的郵件內容,並且在這裏利用Set.add()來排除重複記錄。實際上,現在我覺得在第二步DB查詢時就應該排除重複記錄,更加節約內存。

爲了生成格式好看的郵件出來,可是費了一番功夫。我司用的outlook郵箱客戶端。我先將QA發出來的很好看的郵件轉存成html文件,然後將裏面表格實際內容全部刪掉,作爲郵件模板。由於自己的機器調用我司SMTP服務器會被拒絕(產品服務器在白名單裏,可以通過SMTP服務器發送郵件),所以沒辦法在調試代碼時從自己的機器上發郵件出來。想了又想了,有招兒了,將生成的Html內容寫入到一個.html文件裏,IE打開文件預覽格式。儘管如此我發覺,IE裏看到的效果和最後郵箱收到的還是有差異。

最後用Maven把工具打包成jar文件,寫了個.bat導入腳本執行這個jar包,在服務器上增加了一個task schedule, 每個工作日的上午九點執行。

工具做好後運行起來,效果很好。TruView二把手知道後,要我把別的4張日誌表也加進去,並且郵件要發給全員。然後,又要我寫個詳細的說明文檔,把工具部署到UAT環境裏去。

很開心能將繁瑣的手工活兒用工具來替代。這大概就是自動化的部分意義所在吧。

[本篇博文不包含源代碼,僅涉及自動化日常工作的思路,工具大致構成]

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章