今天下午配合前端那邊聯調接口,接口是用部署在服務器上的,但是這個時候,報錯了,如何在服務器上排查錯誤,經歷的少,這個過程浪費了不少的時間。所以這次記錄一下,保證明天不再犯類似的錯誤。
一、日誌文件的路徑和位置
第一個攔路虎:「你以爲的日誌路徑?」
我查看了項目中的路徑,又去服務器上看了路徑,我就以爲是這個/log/live-chat-web-api.log,然後利用swagger調用該方法,發現還是調用不通。最後看了看日誌,發現最新日誌還是2017年10月份的,所以接下來,我又問了問同事,具體的文件路徑,才發現,日誌文件的路徑是不對的。(浪費了10分鐘,教訓慘痛)
二、linux系統下查看服務器日誌命令不熟悉
如何實時查看log文件,命令是 :tail -f live-chat-module-users.log
還是對於linux命令的每個的含義是什麼,不太清楚,所以總是忘記,用到的時候,就得馬上查。所以今後一定要牢記,這裏也浪費了時間。
三、報錯問題不敏感
下面是用swagger做接口測試,報的錯誤如下:ForI input String :\"string\",很明顯的錯誤信息,輸入格式問題。但是因爲不太確定,服務器上也找不到,所以我本地服務上也跑了一遍,仍然是報同樣的錯誤。然後我確定應該是數據格式的問題。
但是我認真檢查了一遍,跟項目中modle的屬性對應了一遍,發現全都一樣的啊。最後求助於同事,同事一眼就看出來了。是字段LanguageId的問題。model中類型定義如下:
所以swagger中傳遞的也是string類型。
但是實際上在使用的過程中,languageId是多個int類型數字,用逗號分隔組成的字符串。類似於「1,3,34」匹配而成的字符串,
所以傳遞的應該是內容是int類型的字符串。
更改之後,問題解決。
啓發:
問題很明顯,但是沒有考慮到多個int類型的拼接。
四、查看報錯日誌的技巧,如何定位錯誤
解決了第一個問題,第二個問題又過來了。接口報500,我及時定位了錯誤,如下圖:
根據getAdSwitch 顯示行數,是218行,去項目代碼中搜索,確定方法位置。然後看代碼,要去查找對應appId和platform的數據。然後會從list中獲取一條(list.get(0)),應該是未獲取到值,然後導致的空指針。
驗證猜想,
用傳遞的參數去mysql中查詢指定的數據,果然數據爲空,更改傳遞的參數,測試成功。
啓發:
這個思路過程中還是比較清晰的,繼續加油。
四、小結
下午聯調過程中,問題真是百出,感謝同事們的幫助,最後全都解決了。在這個過程中,親身實踐,收穫很多,包括對於自己的思路和技術積累。其實想想,問題真的很小,但是就是這麼小的問題,自己竟然解決不了,很慚愧。
這個下午,心驚膽戰,很難過,又有解決問題之後的喜悅。
繼續加油和努力,既然逃不掉,就拋開臉皮,像漢子一般的向前衝。