【发布时间】:2020-12-09 13:27:42
【问题描述】:
Laravel 似乎存在一个长期存在的问题,无法在生产环境中正确登录。我有一个使用 Docker-compose 制作 web、队列和调度程序服务的小型应用程序。在生产环境中测试这个小应用程序(目前没有用户,所以我可以做一些破坏性调试而不用担心太多),我在尝试访问页面时遇到了 HTTP 500 错误。检查我的 web/laravel.log 文件,过去一个月没有输出。我尝试删除日志文件,并再次点击页面的 500 错误。没有创建文件。
进入 Web Service 容器并运行 tinker 并执行以下操作:
Log::debug("HELLO, World?");
用一行文字创建了 Web/Laravel.log 文件
[2020-08-19 17:51:36] production.DEBUG: HELLO, World?
有几件事:
- 每个 docker 重建、我的缓存、配置等都是从主机上的基础项目重建的,容器只有卷用于日志文件,所以缓存或重置可能不是问题(我会解释如下)。
-
Log::debug("message")按预期工作的事实表明这不是 PATH 问题,也不是权限问题。 - 我只需要对队列服务进行大量调试,在此期间我经常使用 Queue/laravel.log 文件。据我所知,队列服务毫无问题地记录了异常。由于队列服务和 Web 服务是由完全相同的基础项目制成的,具有完全相同的步骤,唯一的区别是执行命令。
- 我尝试在我的开发环境中将 APP_DEBUG 和 APP_ENV 分别更改为 false 和 production,但在我的开发环境中仍然得到正确的输出。
似乎还有很多其他形式存在同样的问题,但都没有给出正确的解决方案。使用This Thread 我能够看到错误消息
"Property [permissioned_users] does not exist on this collection instance."
这很容易找到问题并解决。但是,如果我将来遇到 500 问题,我希望它记录下来,以便我知道发生了什么,所以我想完全解决这个问题并深入了解它。 关于这个问题的以下线程没有给出官方解决方案:
Laravel log errors in production
Laravel 5.8 Log levels are not working
App Debug Not Working in Laravel 5.8
Laravel 5.3 Logging not working
这些旧解决方案中的许多都建议设置“APP_LOG_LEVEL”,这似乎在 Laravel 5.6 中已被贬低。 (Unrelated - Reimplementation of this here?)
目前,我的解决方案似乎类似于将以下行添加到 App\Exception\Handler 第 37 行(而不是上面首先帮助我调试的 dd($e->getMessage() ):
if(config('app.env') == "production" && env('CONTAINER_ROLL') == "web-server"){ Log::error("PRODUCTION WEB EXCEPTION : " . $exception->getMessage()); }
但我宁愿找出根本问题并彻底解决这个问题。
在编写此消息时,我发现了根本问题(权限问题)。请参阅下文了解我的特定(Docker)问题
【问题讨论】:
标签: laravel docker logging docker-compose permissions