Цель:
Я хочу отправить все записи ERROR + Monolog в Sentry вместе с записями более низкого уровня (для упрощения отладки происходящего), и все они должны быть отправлены как одно событие.
Что я имею:
У меня есть приложение Symfony4 с config/packages/prod/monolog.yaml
:
monolog:
handlers:
# there is also fingers_crossed for file logging, but it is rather not related
sentry_buffer:
type: fingers_crossed
action_level: error
handler: sentry_transparent
# ignore records logged by exception listener
channels: ["!exceptions"]
sentry_transparent:
type: whatfailuregroup
members: [sentry]
sentry:
type: raven
# Use Sentry client registered by SentryBundle
client_id: sentry.client
level: debug
auto_log_stacks: true
У меня есть пользовательский обработчик исключений, который создает ответ JSON, но перед отправкой он также регистрирует ошибку в exceptions
канал (поэтому я исключаю этот канал в fingers_crossed
обработчик, поэтому я не получаю дубликаты.
Он работает локально — события Sentry создаются только тогда, когда в Монологе происходят записи ERROR +, и все собранные журналы присоединяются в контексте записи.
Каким-то образом на производстве у нас есть maaaaaaany события с info
уровень и не имеет смысла
Эти события не связаны с какой-либо ошибкой, но в крошках я вижу, что произошла некоторая ошибка устаревания:
Я пытался воспроизвести это с trigger_error
как в ProcessBuilder
(из панировочных сухарей), но что бы я ни делал, я не получаю информацию INFO в моем Страже.
Эти события происходят от длительных процессов (ставить потребителей в очередь), но я выполнил все шаги из производства (запрос, очередь обработки), и я не получил результат, как в нашем производственном экземпляре.
Любые предложения, что происходит? Как я могу улучшить наш конфиг, чтобы достичь того, что нам нужно, но без рассылки нашего Sentry событий, которые нам не нужны?
Решение было добавить BufferHandler
между FingersCrossedHandler
а также WhatFailureGroupHandler
:
sentry_wait_for_error:
type: fingers_crossed
action_level: error
handler: sentry_buffer
excluded_http_codes:
4xx: ~
sentry_buffer: # All records must be sent at once!
type: buffer
handler: sentry_failure_handler
sentry_failure_handler:
type: whatfailuregroup
members: [sentry]
sentry:
type: raven
dsn: '%env(SENTRY_DSN)%'
level: debug
auto_log_stacks: true
release: '%env(APP_VERSION)%'
Других решений пока нет …