最近接入支付寶支付時遇到一個問題,在作支付回調函數的時候我先是寫了一個 Log::info("alipay_notify_info",$request->all())
用來記錄回調時的支付寶請求參數,但發現不管如何日誌都沒有任何記錄,並且回調函數裏面的東西也沒用執行,因而我本身請求該回調地址,發現服務器上 HTTP 狀態碼爲 500 可是沒有任何報錯信息和輸出,日誌也沒有記錄,因而乎在本地再測試了一下,本地輸出正常,無報錯信息,日誌也記錄了 HTTP 請求信息,繼續調試 N 次後無果。php
我猜測是否是日誌出了問題,因而註釋掉日誌記錄,正常輸出,這就奇怪了,Lumen 自帶的日誌記錄怎麼可能有問題?也不是第一次用了,我也歷來沒有改過框架內的代碼,而且日誌直到如今還記錄了今天的隊列異常信息,怎麼可能有問題呢?並且本地也沒問題,就服務器有問題,代碼兩端都是保持徹底一致的,那緣由在哪?我回想這個類文件裏還引用了其餘包,會不會是其餘包裏重名的 Log
類,因而又把 Log
重命名,照樣不行,無輸出無日誌記錄,當時已經下班了,比較餓,看了一下想了想把本身一兩個月沒關的電腦關了,心想明早再來開機從新試試。前端
次日,上班,開機,啓動服務,打開端口,開IDE開調試工具開各類亂七八糟的東西后再調試寫的支付寶回調接口,臥槽,好了?正常輸出,正常記錄日誌,正常寫入支付信息更新帳單等業務操做,一切沒問題,我心想還真是萬能的重啓試試,因而再讓同事測試了一下支付寶支付,OK,沒問題,這問題也就撂下無論了。nginx
過了大概七天左右,七天內也斷斷續續測了幾回支付寶支付,沒有出現過問題,然而在一天早上,前端同事說他支付了帳單但狀態沒變,因而我開始看,數據庫裏狀態未支付,看日誌,沒有請求信息,我想難道支付寶出了問題?沒給我發回調?我又查看了個人 GIT 提交記錄和本地歷史,自從寫好以後支付寶這塊歷來沒動過,而後又 DEBUG ,無果,心想上次重啓了好了,此次再試試,一邊重啓一邊想着若是真重啓就好那這就詭異了,我就只重啓了本地電腦,服務器動都沒動,若是這都能好這問題就更難排查了。數據庫
開機滿懷期待測試接口, GG, 仍是不行,那這問題就有意思了,看來和個人電腦確定無關。問題出在服務器上,並且
php 錯誤日誌因爲一些緣由服務器上也沒用開啓,沒法查看日誌。會不會是硬盤滿了寫不進去?查看硬盤佔用 used 17%,離滿還早得很。沒有寫入權限?也不可能,日誌都寫入那麼久了,每天都有寫入,直到幾分鐘前還記錄了消息隊列裏的警告信息。那這種偶發性的問題關鍵就是要找到觸發 BUG 的條件,因而我開始找日誌裏寫入的信息,此次 BUG 和上次 BUG 出現時日誌都寫入了隊列裏輸出的信息,並且次日就行了,個人日誌記錄都是 daliy
天天記錄一次,那會不會是這種可能?爲了驗證猜測,我直接把 logs 目錄執行了一次 chmod -R 777
, Ok, 沒問題。服務器
那麼緣由就很簡單了:沒有日誌寫入權限。框架
那爲何隊列任務的信息能寫入到日誌呢?爲何平時都能寫入到日誌呢?由於個人隊列任務是以 root 權限執行的任務,而隊列任務做爲當天第一次寫入日誌時在建立的時候就會建立一個 655 權限的日誌文件,而普通的執行文件都是由 nginx 用戶來執行,天然沒有權限對日誌文件進行寫操做,隨即引起問題,致使錯誤。函數
此次問題雖然最後發現了緣由了以後很好解決,但開始出現時確實讓人摸不着頭腦,又沒有任何錯誤信息沒法準確 DEBUG 感受身體被掏空,今天寫出來給本身加深印象,也但願給看到的朋友提供下思路,遇到相似問題不用再浪費時間。工具