Как автоматически сообщать об исключениях по электронной почте в Symfony 3.4 с помощью MonologBundle

Monolog является де-факто стандартной библиотекой журналирования для PHP и поставляется из самых популярных сред PHP, таких как Laravel и Symfony. Он реализует PSR-3 — общий интерфейс для регистрации библиотек, определенный PHP-рис. Type-хинтинг Psr\Log\LoggerInterface В вашем приложении обеспечивается функциональная совместимость, что позволяет вам изменить библиотеку журналов на другую, которая реализует PSR-3 без особой головной боли. Эта библиотека уже включена в Symfony 3 по умолчанию, поэтому вы сможете перехватывать исключения в рабочей среде и отправлять электронную почту с подробностями о сбое.

В этой статье мы покажем вам, как настроить монолог для автоматической отправки электронных писем о критических ошибках с помощью Swift Mailer.

Требования

Вам нужно будет установить следующие пакеты в вашем приложении Symfony (обычно они уже установлены, однако убедитесь, что они установлены в вашем приложении). composer.json):

  • Свифт Мейлер (symfony/swiftmailer-bundle).
  • Монолог (symfony/monolog-bundle).

Убедившись, что в вашем приложении установлены предыдущие инструменты, перейдите к настройке автоматического создания отчетов об ошибках по электронной почте.

1. Настройте App Mailer (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@site.com', 'to_email2@site.com']
to_email:   'to_email@site.com'
subject:    'An Error Occurred! %%message%%'
level:      debug
formatter:  monolog.formatter.html
content_type: text/html

Обработчик почты — это обработчик finger_crossed, который означает, что он запускается только при достижении уровня действия, в данном случае критического (5xx ошибок кода HTTP). Если этот уровень достигнут один раз, обработчик finger_crossed будет регистрировать все сообщения независимо от их уровня. Настройка обработчика означает, что выходные данные затем передаются на дедуплицированный обработчик.

Затем сообщения передаются быстрому обработчику. Это обработчик, который фактически отправляет вам сообщение об ошибке по электронной почте. Настройки для этого просты, адреса «до» и «от», форматер, тип контента и тема. Предыдущий фрагмент — лучшая конфигурация для получения ошибок, которые все еще зарегистрированы на сервере и также отправлены по электронной почте.

3. Причинение преднамеренного исключения для тестирования в производстве

После регистрации почтового отчета монолога, вам необходимо проверить, работает ли он. Вы можете протестировать в своей локальной среде доступ к вашему приложению из производственной среды, однако не забудьте очистить кэш проекта, ранее использовав:

php bin/console cache:clear

В нашем примере мы вызовем простое исключение из контроллера в действии index:

После доступа к действию index в вашем браузере, monolog отправит электронное письмо в фоновом режиме и отобразит ошибку 500 в браузере. Теперь, если вы проверите свою почту, вы увидите сообщение об исключении, класс и файл, в котором сработало исключение, строку и т. Д .:

Отчет об ошибке электронной почты Symfony 3.4 MonologBundle

Теперь вы сможете отлаживать и исправлять эти ошибки, не спрашивая пользователя, что он сделал, чтобы повторить проблему.

Ссылка на основную публикацию
Adblock
detector