1

一定是非常微不足道的事情,但我不能让 symfony2 通过电子邮件发送一些错误(5xx)并简单地将其余部分(信息级别)记录到文件中。

这就是我所拥有的,几乎是symfony2 食谱示例的精确副本。

# app/config/config_prod.yml
monolog:
    handlers:
        main:
            type:         fingers_crossed
            action_level: critical
            handler:      grouped
        grouped:
            type:    group
            members: [streamed, buffered]
        streamed:
            type:  stream
            path:  "%kernel.logs_dir%/%kernel.environment%.log"
            action_level: info
            level: debug
        buffered:
            type:    buffer
            handler: swift
        swift:
            type:       swift_mailer
            from_email: error@example.com
            to_email:   error@example.com
            subject:    An Error Occurred!
            level:      debug

它确实通过电子邮件发送 5xx 错误,但 prod.log 中既没有 404 错误也没有应用程序信息消息

4

2 回答 2

3

那么你想要的是两个行为不同的处理程序吗?然后只需使用两个未连接的处理程序:

# app/config/config_prod.yml
monolog:
    handlers:
        main:
            type:         fingers_crossed
            action_level: error
            handler:      streamed
        streamed:
            type:  stream
            path:  "%kernel.logs_dir%/%kernel.environment%.log"
            action_level: info
            level: debug
        buffered:
            type:    buffer
            action_level: critical
            handler: swift
        swift:
            type:       swift_mailer
            from_email: error@example.com
            to_email:   error@example.com
            subject:    An Error Occurred!
            level:      debug

如您所见,删除分组处理程序,告诉 main 使用流并添加操作级别以缓冲“拆分”流和 swift 的处理,以便您可以为两者定义不同的操作。

使用此记录器,您只会收到通过电子邮件发送的错误消息,而不是完整的日志,就像有一个fingers_crossed类型时那样。如果需要fingers_crossed,只需添加另一个处理程序:

another_main:
    type:         fingers_crossed
    action_level: critical
    handler:      buffered

当然,您需要action_level再次从缓冲中删除。

于 2012-09-04T04:25:56.210 回答
1

从食谱示例:

邮件处理程序是一个 Fingers_crossed 处理程序,这意味着它仅在达到操作级别(在本例中为关键级别)时触发。然后它会记录所有内容,包括低于操作级别的消息。仅针对 5xx HTTP 代码错误触发关键级别。处理程序设置意味着然后将输出传递到缓冲处理程序

再次来自食谱:

如果您希望 400 级和 500 级错误都触发电子邮件,请将 action_level 设置为错误而不是关键。

于 2012-09-03T15:33:19.573 回答