本文概述
Monolog是PHP的事实上的标准日志记录库, 并且在最流行的PHP框架(例如Laravel和Symfony)中开箱即用。它实现了PSR-3-一个由PHP-Fig定义的日志记录库的通用接口。在应用程序中使用类型提示Psr \ Log \ LoggerInterface可以实现互操作性, 允许你为实现PSR-3的另一个应用程序更改日志记录库, 而不会太麻烦。默认情况下, 该库已包含在Symfony 3中, 因此你将能够拦截生产中的异常并发送包含故障详细信息的电子邮件。
在本文中, 我们将向你展示如何配置独白以使用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: smtp
host: smtp.zoho.com
username: mail@myexamplemail.com
password: password123
port: 465
encryption: ssl
spool: { type: memory }
如前所述, 请确保邮件程序以前可以工作, 因为如果邮件程序配置不正确, Monolog不会抛出任何异常。
2.配置Monolog电子邮件报告
出于理智的考虑, 你希望仅在生产环境中自动激活电子邮件报告, 因此需要在config_prod.yml文件中启用独白。你还需要通过电子邮件发送异常并将其写入日志, 因此在生产中对Monolog的配置必须谨慎:
# app/config/config_prod.yml
imports:
- { resource: config.yml }
monolog:
handlers:
main:
type: fingers_crossed
action_level: critical
handler: grouped
grouped:
type: group
members: [streamed, deduplicated]
streamed:
type: stream
path: '%kernel.logs_dir%/%kernel.environment%.log'
level: debug
deduplicated:
type: deduplication
handler: swift
swift:
type: swift_mailer
from_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: debug
formatter: monolog.formatter.html
content_type: text/html
邮件处理程序是finger_crossed处理程序, 这意味着它仅在达到操作级别(在这种情况下为关键级别)(5xx HTTP代码错误)时才触发。如果达到此级别一次, finger_crossed处理程序将记录所有消息, 无论其级别如何。处理程序设置意味着随后将输出传递到重复数据删除的处理程序上。
然后将消息传递到swift处理程序。这是实际处理通过电子邮件向你发送错误的处理程序。设置很简单, 即往返地址, 格式器, 内容类型和主题。上一片段是使错误仍然记录在服务器上并通过电子邮件发送的最佳配置。
3.导致故意的异常以在生产中进行测试
注册独白的电子邮件报告后, 你需要测试它是否有效。你可以在本地环境中进行测试, 以便从生产环境访问应用程序, 但是请不要忘记使用以下方法清除项目的缓存:
php bin/console cache:clear
在我们的示例中, 我们将在index操作中触发一个来自控制器的简单异常:
<?php
namespace 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 class
throw new Exception("That's too bad !");
}
}
在浏览器中访问索引操作后, 独白会在后台发送电子邮件, 并在浏览器中显示500错误。现在, 如果你检查邮件, 你将看到异常消息, 触发异常的类和文件, 行等:
现在, 你将能够调试和修复这些错误, 而无需询问用户他做了什么来复制问题。
编码愉快!
评论前必须登录!
注册