如何通过电子邮件发送严重错误并将其余内容记录到prod.log中

时间:2012-09-03 15:29:13

标签: logging symfony

必须是真正微不足道的东西,但我不能让symfony2通过电子邮件发送一些错误(5xx),只需将其余的(信息级别)记录到文件中。

这就是我所拥有的,几乎是symfony2 cookbook example的精确副本。

# 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错误和应用程序信息消息

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

从食谱中的例子:

  

邮件处理程序是一个fingers_crossed处理程序,这意味着只有在达到操作级别(在本例中为critical)时才会触发它。然后它记录所有内容,包括动作级别下面的消息。仅在5xx HTTP代码错误时触发临界级别。处理程序设置意味着输出然后传递到缓冲的处理程序

再次来自cookbook:

  

如果您想要400级和500级错误来触发电子邮件,请将action_level设置为error而不是critical。