Symfony 4 生产模式错误处理页面内存耗尽
Symfony 4 Production Mode ErrorHandling Pages Memory Exhausted
我在 .env
中将我的项目设置为 prod
模式,除了自定义错误页面之外的所有内容似乎都有效。
我把这个作为我的 404 树枝模板:
{# templates/bundles/TwigBundle/Exception/error404.html.twig #}
{% include 'builder/layout/header.html.twig' with {'title': '404'} %}
<img src="{{ assets('img/not-found.jpeg') }}" class="img-responsive"
id="error-not-found-img" />
<div class="http-error-msg-container">
<h1>404! Page Not Found</h1>
<p>Don't despair, go back to <a href="{{ path('dashboard') }}">Home</a> and try again.</p>
</div>
{% include 'builder/layout/footer.html.twig' %}
然后转到一个不存在的页面(比如 /dashboard/giorgoirdjfisejf
)returns 一个空白页面。所以我将其添加到我的 index.php
文件中:
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(-1);
显示错误,我得到了这个:
Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 20480 bytes) in /var/www/solomon/vendor/monolog/monolog/src/Monolog/Handler/StreamHandler.php on line 107
Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 32768 bytes) in /var/www/solomon/vendor/symfony/debug/Exception/OutOfMemoryException.php on line 1
我不太清楚为什么这会导致错误并且无法调试。 var/log/prod.log
没有显示任何内容,我该如何解决或更好,我该如何调试?
更新
我的prod/monolog.yaml文件
monolog:
handlers:
main:
type: fingers_crossed
action_level: error
handler: nested
excluded_404s:
# regex: exclude all 404 errors from the logs
- ^/
nested:
type: stream
path: "%kernel.logs_dir%/%kernel.environment%.log"
level: debug
console:
type: console
process_psr_3_messages: false
channels: ["!event", "!doctrine"]
这是自动生成的,我没有做任何更改
检查 symfony 日志文件的文件权限。看起来 monolog 捕获了 permission denied
异常,尝试将其写入日志并一次又一次地捕获相同的错误。
在我的例子中,错误消息几乎相同,只是堆栈跟踪始终指向 StreamHandler.php
中的第 171 行。问题是 Composer 在 Windows 上 运行 并且生成的文件被复制到 Linux 系统。这导致使用了不正确的目录分隔符,然后 Symfony 尝试创建 /var/www/html/var\log/prod.log
(包含反斜杠),这显然失败了。
因此,请务必 运行 Composer 与稍后 运行 应用程序所处的 OS 相同。
我在 .env
中将我的项目设置为 prod
模式,除了自定义错误页面之外的所有内容似乎都有效。
我把这个作为我的 404 树枝模板:
{# templates/bundles/TwigBundle/Exception/error404.html.twig #}
{% include 'builder/layout/header.html.twig' with {'title': '404'} %}
<img src="{{ assets('img/not-found.jpeg') }}" class="img-responsive"
id="error-not-found-img" />
<div class="http-error-msg-container">
<h1>404! Page Not Found</h1>
<p>Don't despair, go back to <a href="{{ path('dashboard') }}">Home</a> and try again.</p>
</div>
{% include 'builder/layout/footer.html.twig' %}
然后转到一个不存在的页面(比如 /dashboard/giorgoirdjfisejf
)returns 一个空白页面。所以我将其添加到我的 index.php
文件中:
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(-1);
显示错误,我得到了这个:
Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 20480 bytes) in /var/www/solomon/vendor/monolog/monolog/src/Monolog/Handler/StreamHandler.php on line 107
Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 32768 bytes) in /var/www/solomon/vendor/symfony/debug/Exception/OutOfMemoryException.php on line 1
我不太清楚为什么这会导致错误并且无法调试。 var/log/prod.log
没有显示任何内容,我该如何解决或更好,我该如何调试?
更新
我的prod/monolog.yaml文件
monolog:
handlers:
main:
type: fingers_crossed
action_level: error
handler: nested
excluded_404s:
# regex: exclude all 404 errors from the logs
- ^/
nested:
type: stream
path: "%kernel.logs_dir%/%kernel.environment%.log"
level: debug
console:
type: console
process_psr_3_messages: false
channels: ["!event", "!doctrine"]
这是自动生成的,我没有做任何更改
检查 symfony 日志文件的文件权限。看起来 monolog 捕获了 permission denied
异常,尝试将其写入日志并一次又一次地捕获相同的错误。
在我的例子中,错误消息几乎相同,只是堆栈跟踪始终指向 StreamHandler.php
中的第 171 行。问题是 Composer 在 Windows 上 运行 并且生成的文件被复制到 Linux 系统。这导致使用了不正确的目录分隔符,然后 Symfony 尝试创建 /var/www/html/var\log/prod.log
(包含反斜杠),这显然失败了。
因此,请务必 运行 Composer 与稍后 运行 应用程序所处的 OS 相同。