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