【问题标题】:Monolog: Send errors to Sentry with preserved lower-level log recordsMonolog:使用保留的低级日志记录向 Sentry 发送错误
【发布时间】:2018-12-20 23:25:40
【问题描述】:

目标:

我想将所有 ERROR+ Monolog 记录连同较低级别的记录一起发送到 Sentry(以便于调试正在发生的事情),它们应该作为一个事件全部发送。

我有什么:

我有 config/packages/prod/monolog.yaml 的 Symfony4 应用程序:

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+ 记录并且所有收集的日志都附加在记录的上下文中时,才会创建 Sentry 事件。

不知何故,我们在生产中得到了 info 级别的 maaaaaaany 事件,这没有任何意义:

这些事件与任何错误无关,但在面包屑中我看到触发了一些弃用错误:

我尝试使用 trigger_error 重现此内容,就像在 ProcessBuilder 中一样(来自面包屑),但无论我做什么,我的 Sentry 中都没有收到 INFO 事件。

这些事件来自长时间运行的进程(入队消费者),但我从生产(请求、处理队列)中完成了所有步骤,但我没有像在我们的生产实例中那样得到结果。

有什么建议吗?我怎样才能改进我们的配置来实现我们需要的,但又不会向我们的 Sentry 发送我们不想要的事件?

【问题讨论】:

    标签: php sentry monolog


    【解决方案1】:

    解决方案是在FingersCrossedHandlerWhatFailureGroupHandler 之间添加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)%'
    

    【讨论】:

    • 其实解决方案是为手指交叉处理程序配置stop_buffering,它在第一次激活后传递所有记录。
    猜你喜欢
    • 2021-12-03
    • 1970-01-01
    • 2018-07-24
    • 2015-03-24
    • 2019-02-10
    • 2021-02-12
    • 2019-08-25
    • 2021-08-15
    • 2015-06-09
    相关资源
    最近更新 更多