Symfony 生产模式错误报告和 POST 值
Symfony Production Mode Error Reports and POST values
我正在使用 Symfony 4,但我希望这对于 2 和 3 也是一样的。
来自 swift monolog 处理程序的生产模式错误报告 return GET 请求的完整请求 URL,因此在开发中重现错误相当容易。
但是,如果是 POST 请求,您就会遇到麻烦,因为没有提供 POST 值。
我仔细研究了错误处理和日志记录组件,但没有什么是显而易见的。
有没有其他人遇到过这个问题并找到了解决方法?
是的,我对这类难以追踪的问题使用了修复程序。
您可以在 symfony 4 的 config_prod.yml
或 /config/packages/prod/monolog.yaml 中启用 monolog swift 处理程序。这样您将收到一封与发生错误时处于开发模式。 (取决于 action_level)。
symfony 4见下面的代码(你首先需要安装monolog)
monolog:
handlers:
main:
type: fingers_crossed
# 500 errors are logged at the critical level
action_level: critical
# to also log 400 level errors (but not 404's):
# action_level: error
# excluded_404s:
# - ^/
handler: deduplicated
deduplicated:
type: deduplication
handler: swift
swift:
type: swift_mailer
from_email: '**FROM EMAIL**'
to_email: '**TO EMAIL**'
# or list of recipients
# to_email: ['dev1@example.com', 'dev2@example.com', ...]
subject: 'An Error Occurred! %%message%%'
level: debug
formatter: monolog.formatter.html
content_type: text/html
根据 @Puya Sarmidani 的评论...这就是我最后所做的:
config/services.yaml:
App\Services\MonologExtraProcessor:
tags:
- { name: monolog.processor }
- { name: kernel.event_listener, event: kernel.request, method: onKernelRequest }
src/Services/MonologExtraProcessor.php:
namespace App\Services;
use Symfony\Component\HttpKernel\Event\GetResponseEvent;
class MonologExtraProcessor
{
private $postParams = null;
public function __invoke(array $record)
{
if ($this->postParams !== null) {
$record['extra']['postParams'] = $this->postParams;
}
return $record;
}
public function onKernelRequest(GetResponseEvent $event)
{
$postParams = $event->getRequest()->request->all();
$this->postParams = empty($postParams) ? null : serialize($postParams);
}
}
我正在使用 Symfony 4,但我希望这对于 2 和 3 也是一样的。
来自 swift monolog 处理程序的生产模式错误报告 return GET 请求的完整请求 URL,因此在开发中重现错误相当容易。
但是,如果是 POST 请求,您就会遇到麻烦,因为没有提供 POST 值。
我仔细研究了错误处理和日志记录组件,但没有什么是显而易见的。
有没有其他人遇到过这个问题并找到了解决方法?
是的,我对这类难以追踪的问题使用了修复程序。
您可以在 symfony 4 的 config_prod.yml
或 /config/packages/prod/monolog.yaml 中启用 monolog swift 处理程序。这样您将收到一封与发生错误时处于开发模式。 (取决于 action_level)。
symfony 4见下面的代码(你首先需要安装monolog)
monolog:
handlers:
main:
type: fingers_crossed
# 500 errors are logged at the critical level
action_level: critical
# to also log 400 level errors (but not 404's):
# action_level: error
# excluded_404s:
# - ^/
handler: deduplicated
deduplicated:
type: deduplication
handler: swift
swift:
type: swift_mailer
from_email: '**FROM EMAIL**'
to_email: '**TO EMAIL**'
# or list of recipients
# to_email: ['dev1@example.com', 'dev2@example.com', ...]
subject: 'An Error Occurred! %%message%%'
level: debug
formatter: monolog.formatter.html
content_type: text/html
根据 @Puya Sarmidani 的评论...这就是我最后所做的:
config/services.yaml:
App\Services\MonologExtraProcessor:
tags:
- { name: monolog.processor }
- { name: kernel.event_listener, event: kernel.request, method: onKernelRequest }
src/Services/MonologExtraProcessor.php:
namespace App\Services;
use Symfony\Component\HttpKernel\Event\GetResponseEvent;
class MonologExtraProcessor
{
private $postParams = null;
public function __invoke(array $record)
{
if ($this->postParams !== null) {
$record['extra']['postParams'] = $this->postParams;
}
return $record;
}
public function onKernelRequest(GetResponseEvent $event)
{
$postParams = $event->getRequest()->request->all();
$this->postParams = empty($postParams) ? null : serialize($postParams);
}
}