必须是真正微不足道的东西,但我不能让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错误和应用程序信息消息答案 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。