我在Monolog
项目中使用Symfony 2.8
。我已配置邮件处理程序向我发送有关所有错误的通知。
由于并非所有错误都很重要(例如PageNotFound
为/apple-app-site-association
),我想添加一个过滤器。我通过添加自定义处理程序来完成此操作:
配置:
services:
monolog.custom_handler.service:
class: AppBundle\Log\CustomHandler
monolog:
main:
type: service
id: monolog.custom_handler.service
level: error
handler: mail_buffer
mail_buffer:
type: buffer
handler: mailer
mailer:
type: swift_mailer
from_email: "my address"
to_email: "my address"
subject: ERROR!
formatter: monolog.formatter.extended
处理程序:
namespace AppBundle\Log;
use Monolog\Handler\AbstractHandler;
class CustomHandler extends AbstractHandler {
public function handle(array $record) {
// Check if handling level was reached
if ($record['level'] < $this->level)
return false;
if (!empty($record)) {
$url = (isset($record['extra']) && isset($record['extra']['url']) ? $record['extra']['url'] : '');
$message = (isset($record['message']) ? $record['message'] : '');
// Well Known Pages
if (strpos($url, '/.well-known') === 0) {
//echo "...match 1</br>";
return true;
}
if ($url == '/apple-app-site-association') {
//echo "...match 2</br>";
return true;
}
if (strpos($url, '/apple-touch-icon') === 0) {
//echo "...match 3</br>";
return true;
}
...
}
// Record was NOT handled --> DO NOT stop bubbeling
return false;
}
}
使用我可以确认的echo
语句,调用处理程序,并且if
子句正确匹配。因此,如果例如调用/apple-app-site-association
,则处理程序返回true
。我希望,这会停止冒泡,因此嵌套的mail_buffer
处理程序不再被调用。 情况并非如此。
无论处理程序返回true还是false,我仍然会收到所有错误的邮件。
我做错了什么?如何停止处理已过滤的邮件?