当前位置: 首页 > 后端技术 > PHP

关于LumennooutputHTTPstatuscode500的诡异错误

时间:2023-03-30 01:36:54 PHP

关于Lumennooutput500error最近在接入支付宝支付时遇到了一个问题。我在做支付回调函数的时候,先写了一个Log::info("alipay_notify_info",$request->all())用来记录回调时的支付宝请求参数,但是发现里面没有记录反正log了,回调函数里的东西也没用,所以自己去请求回调地址,发现服务器上的HTTP状态码是500但是没有错误信息也没有输出,里面也没有记录log,于是在本地又测试了一遍。本地输出正常,没有报错信息,日志也记录了HTTP请求信息。继续调试N次无果。猜测是日志有问题,于是将日志记录注释掉,正常输出。这就奇怪了,Lumen自带的日志记录怎么会出问题呢?又不是第一次用,框架里的代码我也没改过,而且日志里还记录着今天的队列异常信息,怎么会出问题呢?而且本地没有问题,但是服务器有问题。两端代码完全一致。是什么原因?我记得这个类文件还引用了其他包。会不会是其他包里的同名Log类,所以我又重命名了Log,还是不行。没有输出,也没有日志记录。想了想,我把一两个月没关的电脑关了,心想明天早上再打开试试。第二天上班,开机,启动服务,打开端口,打开IDE,打开调试工具,打开各种乱七八糟的东西,然后调试写好的支付宝回调接口。该死的,好吗?正常输出,正常记录日志,正常写入支付信息和更新账单等业务操作,一切正常,心想真是万能的,重启试试,于是请同事测试支付宝支付,OK,没问题,这个问题就不管了。大概过了七天,我也在这七天内断断续续地测试了几次支付宝支付,都没有问题。然而,有一天早上,前端同事说他付了单,但是状态没有变化,于是我开始看,数据库里的状态是未付,看日志,没有请求信息。我觉得支付宝有问题?没有给我回电吗?我再次检查了我的GIT提交记录和本地历史记录。支付宝自从我写了以后就没碰过,然后DEBUG,无果。我以为我上次重新启动了它。这次再试一次,一边重启一边想如果重启会很奇怪,所以只重启了本地电脑,服务器没有动。如果可以做到这一点,问题将更难解决。满怀期待的开机测试界面,GG,还是不行,那这个问题就有意思了,看来跟我的电脑没什么关系。问题出在服务器上,由于某种原因服务器上没有开启php错误日志,无法查看日志。会不会是硬盘满了,无法写入?查看硬盘已使用的17%,远未满。没有写权限?也不可能,日志写了这么久,天天写,消息队列里的警告信息是几分钟前才记录的。这种偶发问题的关键是找到触发BUG的条件,于是开始寻找日志中写的信息。日子还好,我的日志记录都是daliy一天记录一次,可以吗?为了验证猜想,我直接在logs目录下执行了一个chmod-R777,OK,没问题。那么原因很简单:没有日志写入权限。那为什么队列任务的信息可以写入日志呢?为什么平时可以写入日志呢?因为我的队列任务是root权限执行的,而且当天队列任务第一次写入日志时,创建队列任务时会创建一个655权限的日志文件,创建普通执行文件由nginx用户执行,自然没有写入日志文件的权限,立马出问题,导致错误。虽然最后找到了问题,也好解决,但是刚出现的时候真的是一头雾水,而且没有出现无法准确调试的错误信息。我觉得我的身体被掏空了。今天写出来是为了加深印象,也希望能给看到的朋友提供下思路,遇到类似问题就不用浪费时间了。