虽然开启了APP_DEBUG 但是 log 却没有记录任何错误信息,后来经过测试发现原来是路由问题,因为微信服务器发送消息是使用 post 方法,但是我的路由定义只定义了 get (tp 用多了习惯了不分 get、post),所以会导致路由异常,从而导致微信公众号上面会提示服务器故障,中间方向错误,导致排查很久,后来才想起可以在异常处理文件里面写 log。
这时候我们可以在 appExceptionsHandler.php 的 report 方法加上下面几句,出异常的时候记录错误信息:
if (env('APP_DEBUG')) { Log::error('error file: ' . $exception->getFile()); Log::error('error line: ' . $exception->getLine()); Log::error('error message: ' . $exception->getMessage()); Log::error('exception type: ' . get_class($exception)); Log::error('trace' . $exception->getTraceAsString()); }
加上之后 report 方法如下:
这样一来,开发过程中的 500 就全部记录下来(前提是开启debug模式),这样开发的时候,微信提示服务器故障的时候就可以去看 log 是什么原因导致的。
还有一个需要注意的是:laravel 默认开启 csrf 的验证,我们可以在 appHttpKernel.php 的 $middlewareGroups 中可以看到有这么一行:
AppHttpMiddlewareVerifyCsrfToken::class,
但是我们需要清楚的是,微信 post 过来的数据是没有这个 token 的,所以我们需要把这一行注释掉,否则在验证这一步就会返回,得不到我们想要的结果。