关于 Lumen 无输出 HTTP 状态码为 500 的诡异错误

关于LUMEN无输出500错误

最近接入支付宝支付时遇到一个问题,在作支付回调函数的时候我先是写了一个 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 感受身体被掏空,今天写出来给本身加深印象,也但愿给看到的朋友提供下思路,遇到相似问题不用再浪费时间。工具

相关文章
相关标签/搜索