Monolog:将错误发送到带有保留的低级日志记录的哨兵
Monolog: Send errors to Sentry with preserved lower-level log records
目标:
我想将所有 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
处理程序中排除了这个通道,所以我不不会重复。
它在本地工作 - 仅当 Monolog 中出现 ERROR+ 记录时才会创建哨兵事件,并且所有收集的日志都附加在记录的上下文中。
在生产环境中,我们以某种方式得到了 info
级别的 maaaaaaany 事件,但它没有意义:
这些事件与任何错误无关,但在面包屑中我看到触发了一些弃用错误:
我试过用 trigger_error
重现这个,就像在 ProcessBuilder
中一样(来自面包屑),但无论我做什么,我的 Sentry 中都没有收到 INFO 事件。
这些事件来自长 运行 进程(排队消费者),但我执行了生产中的所有步骤(请求、处理队列),但我没有像在我们的生产实例中那样得到结果。
有什么建议吗?我怎样才能改进我们的配置来实现我们所需要的,同时又不向我们的 Sentry 发送我们不想要的事件?
解决方案是在 FingersCrossedHandler
和 WhatFailureGroupHandler
之间添加 BufferHandler
:
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)%'
目标:
我想将所有 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
处理程序中排除了这个通道,所以我不不会重复。
它在本地工作 - 仅当 Monolog 中出现 ERROR+ 记录时才会创建哨兵事件,并且所有收集的日志都附加在记录的上下文中。
在生产环境中,我们以某种方式得到了 info
级别的 maaaaaaany 事件,但它没有意义:
这些事件与任何错误无关,但在面包屑中我看到触发了一些弃用错误:
我试过用 trigger_error
重现这个,就像在 ProcessBuilder
中一样(来自面包屑),但无论我做什么,我的 Sentry 中都没有收到 INFO 事件。
这些事件来自长 运行 进程(排队消费者),但我执行了生产中的所有步骤(请求、处理队列),但我没有像在我们的生产实例中那样得到结果。
有什么建议吗?我怎样才能改进我们的配置来实现我们所需要的,同时又不向我们的 Sentry 发送我们不想要的事件?
解决方案是在 FingersCrossedHandler
和 WhatFailureGroupHandler
之间添加 BufferHandler
:
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)%'