我正在开发我的第一个基于 Symfony 的 WebApp 项目。我已将 Symfony 配置为不仅将日志消息写入不同的日志文件,而且还立即以电子邮件形式发送关键错误消息。这很好用。不过,我想在默认日志消息中添加一些附加信息,以便更轻松地找到实际的错误源。
例子:
一页的 Twig 文件从 .yml 文件加载本地化文本。文本包含一个%about_link%
应替换为“关于”页面的路径/URL 的占位符。我忘记了这个替换,所以链接没有指向 URL 而是指向%about_link%
反而。这导致NotFoundHttpException
因为没有路线可以到达%about_link%
可以被找寻到...
没什么大不了。但要找到包含此错误的实际页面/控制器有点棘手。默认日志消息显示以下内容:
[2015-12-14 17:19:36] request.ERROR: Uncaught PHP Exception Symfony\Component\HttpKernel\Exception\NotFoundHttpException: "No route found for "GET /%25about_link%25"" at /long/path/to/symfony/.../RouterListener.php line 176 []
所以抛出了异常RouterListener.php
当试图找到一条路线时%about_link%
。好吧,这并没有给我任何提示这个坏链接位于哪个页面。
当然,对错误路由的调用根本不必位于任何页面上。用户可以直接输入错误链接。 Symfony 必须存储/记住最后一页才能给出有关可能来源的任何提示。那么,是否有可能包含这些信息呢?
此外,我想添加有关报告问题的主机的信息。我正在运行 WebApp 的两个实例:www.my_web_app.xy
and betatest.my_web_app.xy
如果日志消息显示它是否来自,这将是一个很大的帮助www
或来自betatest
.
将此信息添加到我自己创建的日志消息中没有问题,但如何将此信息添加到由 Symfony 或第三方代码生成的消息中?我必须在日志消息到达日志处理程序之前以某种方式拦截它。这可能吗?
如果您想向日志条目添加额外的信息,您可以使用处理器来完成此操作。使用处理器,您可以在格式化程序解析记录数组之前对其进行修改。额外的部分显示在日志条目的末尾。
<?php
namespace AppBundle\Monolog;
use Symfony\Component\HttpFoundation\RequestStack;
class WebProcessor
{
private $requestStack;
public function __construct(RequestStack $requestStack)
{
$this->requestStack = $requestStack;
}
public function processRecord(array $record)
{
$request = $this->requestStack->getCurrentRequest();
if ($request) {
$record['extra']['host'] = $request->getHost();
$record['extra']['url'] = $request->getRequestUri();
// ...
}
return $record;
}
}
现在将其添加到您的services.yml
为所有日志条目注册它:
app.monolog.processor.web:
class: AppBundle\Monolog\WebProcessor
arguments: ["@request_stack"]
tags:
- { name: monolog.processor, method: processRecord }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)