Як сконфігурувати Monolog так, щоб він надсилав помилки електронною поштою
Дата оновлення перекладу 2023-09-19
Як сконфігурувати Monolog так, щоб він надсилав помилки електронною поштою
3.6
Підтримка відправлення помилок електронною поштою з використанням Symfony mailer була додана в MonologBundle 3.6.
Monolog може бути сконфігурован так, щоб надсилати електронний лист при виникненні помилки у додатку. Для цього конфігурація вимагає декілька вкладених обробників, щоб уникати отримання занадто великої кількості листів. Ця конфігурація на перший погляд виглядає складною, але кожний обробник достатньо простий та зрозумілий, якщо розібрати його на складові.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
# config/packages/prod/monolog.yaml
monolog:
handlers:
main:
type: fingers_crossed
# на критичному рівні логується 500 помилок
action_level: critical
# щоб також логувати 400 рівень помилок (але не помилок 404):
# action_level: error
# excluded_404s:
# - ^/
handler: deduplicated
deduplicated:
type: deduplication
handler: symfony_mailer
symfony_mailer:
type: symfony_mailer
from_email: 'error@example.com'
to_email: 'error@example.com'
# або список отримувачів
# to_email: ['dev1@example.com', 'dev2@example.com', ...]
subject: 'An Error Occurred! %%message%%'
level: debug
formatter: monolog.formatter.html
content_type: text/html
Обробник mail
- це обробник fingers_crossed
, що означає, що він запускається
лише коли досягнуто рівень дії, у цьому випадку - critical
. Рівень critical
запускається лише для помилок HTTP-коду 5xx. Якщо цей рівень досягнуто один раз,
обробник fingers_crossed
буде логувати всі повідомлення, не зважаючи на їх рівень.
Налаштування handler
означає, що виведення потім передається в обробник deduplicated
.
Tip
Якщо ви хочете, щоб помилки і 400, і 500 рівнів викликали надсиалння листа,
встановіть action_level
у значенні error
замість critical
. Див.
код вище, щоб побачити приклад.
Обробник deduplicated
просто зберігає всі повідомлення для запиту, а потім передає
їх у вкладний обробник за один раз, але лише якщо записи унікальні протягом заданого
періоду часу (за замовчуванням - 60 секунд). Якщо записи є дублікатами, то вони просто
скидаютьсся. Додавання цього обробника зменшує обяг сповіщень до керованого рівня, особливо
у сценаріях критичної відмови. Ви можете налаштувати часовий проміжок, використовуючи опцію
time
:
1 2 3 4 5 6 7 8 9
# config/packages/prod/monolog.yaml
monolog:
handlers:
# ...
deduplicated:
type: deduplication
# час в секундах, протягом якого видаляються дубльовані записи (за замовчуванням: 60)
time: 10
handler: swift
Потім повідомлення передаються обробнику swift
. Це той обробник, який працює з
відправленням вам листа помилково. Його установки прості та зрозумілі: адреса відправника
та отримувача, форматувальник, тип змісту та субʼєкт.
Ви можете комбінувати ці обробники з іншими, щоб помилки продовжували логуватися на сервері, а електронні листи продовжували надсилатися:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
# config/packages/prod/monolog.yaml
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: symfony_mailer
symfony_mailer:
type: symfony_mailer
from_email: 'error@example.com'
to_email: 'error@example.com'
subject: 'An Error Occurred! %%message%%'
level: debug
formatter: monolog.formatter.html
content_type: text/html
Використовується обробник group
для відправлення повідомлень двом членам групи,
обробники deduplicated
і stream
. Тепер обидва повідомлення будуть записані у
файл логів і відправлені електронною поштою.