最近在公司寫日誌系統發現乙個很詭異的bug,經過排查是非同步程式設計資源**問題沒有處理的好的問題,故再次記錄一下,方便以後自己複習,和讓別人新手少走彎路。
直接上**,仔細的同學會發現裡面有乙個bug嗎?我會加粗
//最近寫的日誌專案**,傳送日誌服務
//介面定義
public void sendbusinesslog(mapparams);
businesslogservice.sendbusinesslog(collectionutil.hashmap(
businesslogutil.log_param_change_before, null,
businesslogutil.log_param_change_after, terminal_activation_codenew,
//此處傳入httprequest
)));
上完整介面**
@override
public void enablevendor(maprequest)
實際應用中我們發現,改日誌記錄過程會有的會記錄,有的不會記錄,尤其當專案剛剛構建的時候,必不會記錄。經過排查邏輯**無bug,這就很奇怪了,為什麼會發生這樣的事情呢?
通過loginfo,我發現只要當一跳請求被傳送到介面出與日誌記錄系統列印引數資訊的時間超過60毫秒,日誌就不會記錄。
為什麼?
//此處傳入httprequest
businesslogutil.log_param_request, **httprequestutil.getrequest()
我們這裡傳入的乙個request的位址,由於日誌傳送是非同步的,所以當日誌還未處理到獲取http頭部的具體資訊的收就已經返回了,也就是說businesslogutil.log_param_request這個引數此時已經為空,這也就是問什麼日誌無法記錄了。
總結
*非同步程式設計時要考慮到當*a執行緒函式返回時,你的其他的執行緒中是否使用了**a執行緒中得資源。
歡迎使用CSDN markdow
本markdown編輯器使用stackedit修改而來,用它寫部落格,將會帶來全新的體驗哦 markdown 是一種輕量級標記語言,它允許人們使用易讀易寫的純文字格式編寫文件,然後轉換成格式豐富的html頁面。維基百科 使用簡單的符號標識不同的標題,將某些文字標記為粗體或者斜體,建立乙個鏈結等,詳細...
歡迎毛毛與妞妞使用CSDN markdown編輯器
建立乙個自定義列表 如何建立乙個註腳 注釋也是必不可少的 katex數學公式 新的甘特圖功能,豐富你的文章 uml 圖表 flowchart流程圖 匯出與匯入 你好!這是你第一次使用markdown編輯器所展示的歡迎頁。如果你想學習如何使用markdown編輯器,可以仔細閱讀這篇文章,了解一下mar...
歡迎使用CSDN markdow1n編輯器
本markdown編輯器使用stackedit修改而來,用它寫部落格,將會帶來全新的體驗哦 markdown 是一種輕量級標記語言,它允許人們使用易讀易寫的純文字格式編寫文件,然後轉換成格式豐富的html頁面。維基百科 使用簡單的符號標識不同的標題,將某些文字標記為粗體或者斜體,建立乙個鏈結等,詳細...