摘要:關(guān)于無輸出錯誤最近接入支付寶支付時遇到一個問題,在做支付回調(diào)函數(shù)的時候我先是寫了一個用來記錄回調(diào)時的支付寶請求參數(shù),但發(fā)現(xiàn)無論如何日志都沒有任何記錄,而且回調(diào)函數(shù)里面的東西也沒用執(zhí)行,于是我自己請求該回調(diào)地址,發(fā)現(xiàn)服務(wù)器上狀態(tài)碼為但是沒有
關(guān)于LUMEN無輸出500錯誤
最近接入支付寶支付時遇到一個問題,在做支付回調(diào)函數(shù)的時候我先是寫了一個 Log::info("alipay_notify_info",$request->all()) 用來記錄回調(diào)時的支付寶請求參數(shù),但發(fā)現(xiàn)無論如何日志都沒有任何記錄,而且回調(diào)函數(shù)里面的東西也沒用執(zhí)行,于是我自己請求該回調(diào)地址,發(fā)現(xiàn)服務(wù)器上 HTTP 狀態(tài)碼為 500 但是沒有任何報錯信息和輸出,日志也沒有記錄,于是乎在本地再測試了一下,本地輸出正常,無報錯信息,日志也記錄了 HTTP 請求信息,繼續(xù)調(diào)試 N 次后無果。
我猜想是不是日志出了問題,于是注釋掉日志記錄,正常輸出,這就奇怪了,Lumen 自帶的日志記錄怎么可能有問題?也不是第一次用了,我也從來沒有改過框架內(nèi)的代碼,并且日志直到現(xiàn)在還記錄了今天的隊列異常信息,怎么可能有問題呢?而且本地也沒問題,就服務(wù)器有問題,代碼兩端都是保持完全一致的,那原因在哪?我回想這個類文件里還引用了其他包,會不會是其他包里重名的 Log 類,于是又把 Log 重命名,照樣不行,無輸出無日志記錄,當時已經(jīng)下班了,比較餓,看了一下想了想把自己一兩個月沒關(guān)的電腦關(guān)了,心想明早再來開機重新試試。
第二天,上班,開機,啟動服務(wù),打開端口,開IDE開調(diào)試工具開各種亂七八糟的東西后再調(diào)試寫的支付寶回調(diào)接口,臥槽,好了?正常輸出,正常記錄日志,正常寫入支付信息更新賬單等業(yè)務(wù)操作,一切沒問題,我心想還真是萬能的重啟試試,于是再讓同事測試了一下支付寶支付,OK,沒問題,這問題也就撂下不管了。
過了大概七天左右,七天內(nèi)也斷斷續(xù)續(xù)測了幾次支付寶支付,沒有出現(xiàn)過問題,然而在一天早上,前端同事說他支付了賬單但狀態(tài)沒變,于是我開始看,數(shù)據(jù)庫里狀態(tài)未支付,看日志,沒有請求信息,我想難道支付寶出了問題?沒給我發(fā)回調(diào)?我又查看了我的 GIT 提交記錄和本地歷史,自從寫好之后支付寶這塊從來沒動過,然后又 DEBUG ,無果,心想上次重啟了好了,這次再試試,一邊重啟一邊想著如果真重啟就好那這就詭異了,我就只重啟了本地電腦,服務(wù)器動都沒動,如果這都能好這問題就更難排查了。
開機滿懷期待測試接口, GG, 還是不行,那這問題就有意思了,看來和我的電腦肯定無關(guān)。問題出在服務(wù)器上,而且
php 錯誤日志由于一些原因服務(wù)器上也沒用開啟,無法查看日志。會不會是硬盤滿了寫不進去?查看硬盤占用 used 17%,離滿還早得很。沒有寫入權(quán)限?也不可能,日志都寫入那么久了,天天都有寫入,直到幾分鐘前還記錄了消息隊列里的警告信息。那這種偶發(fā)性的問題關(guān)鍵就是要找到觸發(fā) BUG 的條件,于是我開始找日志里寫入的信息,這次 BUG 和上次 BUG 出現(xiàn)時日志都寫入了隊列里輸出的信息,而且第二天就好了,我的日志記錄都是 daliy 每天記錄一次,那會不會是這種可能?為了驗證猜想,我直接把 logs 目錄執(zhí)行了一次 chmod -R 777 , Ok, 沒問題。
那么原因就很簡單了:沒有日志寫入權(quán)限。
那為什么隊列任務(wù)的信息能寫入到日志呢?為什么平時都能寫入到日志呢?因為我的隊列任務(wù)是以 root 權(quán)限執(zhí)行的任務(wù),而隊列任務(wù)作為當天第一次寫入日志時在創(chuàng)建的時候就會創(chuàng)建一個 655 權(quán)限的日志文件,而普通的執(zhí)行文件都是由 nginx 用戶來執(zhí)行,自然沒有權(quán)限對日志文件進行寫操作,隨即引發(fā)問題,導致錯誤。
這次問題雖然最后發(fā)現(xiàn)了原因了之后很好解決,但開始出現(xiàn)時確實讓人摸不著頭腦,又沒有任何錯誤信息無法準確 DEBUG 感覺身體被掏空,今天寫出來給自己加深印象,也希望給看到的朋友提供下思路,遇到類似問題不用再浪費時間。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/30628.html
摘要:在開發(fā)中,用戶認證是核心,是數(shù)據(jù)是否有保障的前提,目前主要有兩種常用方式進行用戶認證和。附是為了在網(wǎng)絡(luò)應(yīng)用環(huán)境間傳遞聲明而執(zhí)行的一種基于的開放標準。 好久沒寫 PHP 代碼了,尤其是 Lumen,我是 Lumen 的忠實用戶,自從面世開始,我就將 Lumen 作為我 API 的主要框架使用。 但說到 API,不得不說的一個概念:「前后端分離」,現(xiàn)在越來越多的團隊都采用前后端分離,徹底解...
摘要:是一種無狀態(tài)協(xié)議。響應(yīng)空白行代表相應(yīng)頭結(jié)束響應(yīng)正文或者叫消息主題響應(yīng)行響應(yīng)的第一行為響應(yīng)行,其中有版本,狀態(tài)碼以及消息響應(yīng)頭第二行至末尾空白行為響應(yīng)頭,由服務(wù)器向客戶端發(fā)送。這個頭通常配合狀態(tài)碼使用。 無狀態(tài)的Http協(xié)議 http協(xié)議的最新版本是1.1。是一種無狀態(tài)協(xié)議。 什么是無狀態(tài)協(xié)議? 無狀態(tài)協(xié)議是指web瀏覽器與web服務(wù)器之間不需要建立持久鏈接。當客戶端向服務(wù)器端發(fā)送請求(...
摘要:狀態(tài)碼是用以表示網(wǎng)頁服務(wù)器響應(yīng)狀態(tài)的位數(shù)字代碼。狀態(tài)碼一共分為五類。這些狀態(tài)碼被分為五大類用于指定客戶端應(yīng)相應(yīng)的某些動作。 HTTP狀態(tài)碼(HTTP Status Code)是用以表示網(wǎng)頁服務(wù)器HTTP響應(yīng)狀態(tài)的3位數(shù)字代碼。HTTP狀態(tài)碼一共分為五類。狀態(tài)碼的第一個數(shù)字代表了響應(yīng)的五種狀態(tài)之一。 這些狀態(tài)碼被分為五大類: 100-199 用于指定客戶端應(yīng)相應(yīng)的某些動作。 200-29...
摘要:如果狀態(tài)碼附帶文字段落,該文本將被放置在響應(yīng)主體。相反,如果狀態(tài)碼后面是一個,該將成為頭部值。沒有狀態(tài)碼的將被視為一個狀態(tài)碼,這種情況下需要以或者開頭。因為和不能簡單的只返回狀態(tài)碼,還必須有重定向的,這就是指令無法返回的原因了。 HTTP模塊(核心模塊,也是主要用到的模塊) server模塊 server模塊是http的子模塊,它用來定義一個虛擬主機 例子: server { ...
閱讀 1829·2021-11-11 16:55
閱讀 749·2019-08-30 15:53
閱讀 3587·2019-08-30 15:45
閱讀 670·2019-08-30 14:10
閱讀 3262·2019-08-30 12:46
閱讀 2122·2019-08-29 13:15
閱讀 2025·2019-08-26 13:48
閱讀 933·2019-08-26 12:23