本文概述
- 要求
- 1.配置应用程序邮件程序(Swift Mailer)
- 2.配置Monolog电子邮件报告
- 3.导致故意的异常以在生产中进行测试
【如何在Symfony 3.4中使用MonologBu??ndle通过电子邮件自动报告异常】在本文中, 我们将向你展示如何配置独白以使用Swift Mailer自动发送有关严重错误的电子邮件。
要求 你将需要在Symfony应用程序中安装以下软件包(它们通常已经安装, 但是请检查是否已将它们安装在composer.json中):
- Swift Mailer(symfony / swiftmailer-bundle)。
- Monolog(symfony / monolog-bundle)。
1.配置应用程序邮件程序(Swift Mailer) 为了发送错误电子邮件, Monolog将需要在你的应用程序中配置了Swiftmailer的默认邮件程序。这可以在config.yml中轻松完成, 并提供电子邮件凭据, 传输模式, 加密等(有关swiftmailer配置的更多信息, 请参见此处):
# app/config/config.yml# Swiftmailer Configuration# Note: the setup may change according to your email provider# for example, with zoho, the configuration for the mailer would# be something like this.swiftmailer:transport: smtphost:smtp.zoho.comusername:mail@myexamplemail.compassword:password123port: 465encryption: sslspool:{ type: memory }
如前所述, 请确保邮件程序以前可以工作, 因为如果邮件程序配置不正确, Monolog不会抛出任何异常。
2.配置Monolog电子邮件报告 出于理智的考虑, 你希望仅在生产环境中自动激活电子邮件报告, 因此需要在config_prod.yml文件中启用独白。你还需要通过电子邮件发送异常并将其写入日志, 因此在生产中对Monolog的配置必须谨慎:
# app/config/config_prod.ymlimports:- { resource: config.yml }monolog:handlers:main:type:fingers_crossedaction_level: criticalhandler:groupedgrouped:type:groupmembers: [streamed, deduplicated]streamed:type:streampath:'%kernel.logs_dir%/%kernel.environment%.log'level: debugdeduplicated:type:deduplicationhandler: swiftswift:type:swift_mailerfrom_email: 'from_email@test.com'# Or multiple receivers:# to_email:['to_email1@ourcodeworld.com', 'to_email2@ourcodeworld.com']to_email:'to_email@ourcodeworld.com'subject:'An Error Occurred! %%message%%'level:debugformatter:monolog.formatter.htmlcontent_type: text/html
邮件处理程序是finger_crossed处理程序, 这意味着它仅在达到操作级别(在这种情况下为关键级别)(5xx HTTP代码错误)时才触发。如果达到此级别一次, finger_crossed处理程序将记录所有消息, 无论其级别如何。处理程序设置意味着随后将输出传递到重复数据删除的处理程序上。
然后将消息传递到swift处理程序。这是实际处理通过电子邮件向你发送错误的处理程序。设置很简单, 即往返地址, 格式器, 内容类型和主题。上一片段是使错误仍然记录在服务器上并通过电子邮件发送的最佳配置。
3.导致故意的异常以在生产中进行测试 注册独白的电子邮件报告后, 你需要测试它是否有效。你可以在本地环境中进行测试, 以便从生产环境访问应用程序, 但是请不要忘记使用以下方法清除项目的缓存:
php bin/console cache:clear
在我们的示例中, 我们将在index操作中触发一个来自控制器的简单异常:
<
?phpnamespace AppBundle\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
class PagesController extends Controller{public function indexAction(){// Test non-existent classthrow new Exception("That's too bad !");
}}
在浏览器中访问索引操作后, 独白会在后台发送电子邮件, 并在浏览器中显示500错误。现在, 如果你检查邮件, 你将看到异常消息, 触发异常的类和文件, 行等:
文章图片
现在, 你将能够调试和修复这些错误, 而无需询问用户他做了什么来复制问题。
编码愉快!
推荐阅读
- 如何使用EventListener根据用户在Symfony 2.8中的角色将用户重定向到特定页面
- 我应该使用’#’还是’javascript(void(0);’在我的空链接的href属性上)
- 如何在Symfony 1.4中检索当前模块的名称
- 如何摆脱PHP警告(json_encode()期望参数2长,给定字符串)
- 如何在PHP中按键对关联数组进行分组
- 如何在Symfony 1.4中通过HTTPS(HTTP over SSL)强制全局访问
- Android JobScheduler需要先检查是否正常工作,然后再运行其他任务
- 无法解析Android中的方法'execute()'
- 通过在Android中实现Proguard,使用JDBC在Asynctask中崩溃