我想将所有邮件记录到日志文件中,但仅在出现404错误的情况下才发送电子邮件。 我使用这个代码工作正常,但它对我没有意义,因为这个代码意味着只有达到错误级别才会触发主处理程序然后它将被记录或通过电子邮件发送。实际上所有消息仍然记录到文件中。我在这里失踪了什么?
monolog:
handlers:
main:
type: fingers_crossed
action_level: error
excluded_404s:
- ^/
handler: grouped
grouped:
type: group
members: [streamed, deduplicated]
streamed:
type: stream
path: "%kernel.logs_dir%/%kernel.environment%.log"
level: debug
deduplicated:
type: deduplication
handler: swift
swift:
type: swift_mailer
from_email: %noreply_email%
to_email: %webmaster_email%
subject: 'Error Notification %%message%%'
level: error
formatter: monolog.formatter.html
content_type: text/html
login:
type: stream
path: "%kernel.logs_dir%/auth.log"
level: info
channels: security
nested:
type: stream
path: "%kernel.logs_dir%/%kernel.environment%.log"
level: debug
console:
type: console
编辑:这是最终版本
monolog:
handlers:
streamed:
type: stream
path: "%kernel.logs_dir%/%kernel.environment%.log"
level: debug
emailed:
type: fingers_crossed
action_level: error
excluded_404s:
- ^/
handler: swift
swift:
type: swift_mailer
from_email: %noreply_email%
to_email: %webmaster_email%
subject: 'Error Notification %%message%%'
level: error
formatter: monolog.formatter.html
content_type: text/html
login:
type: stream
path: "%kernel.logs_dir%/auth.log"
level: info
channels: security
console:
type: console
答案 0 :(得分:2)
所有邮件仍然会记录到该文件中。我在这里失踪了什么?
它起作用的原因是你还有 nested
处理程序,其中实际上没有嵌套,这使得它(从MonologBundle的角度来看)成为一个顶级-level handler(意味着它将接收应用程序中生成的所有日志)。此外,它指向与streamed
处理程序相同的文件,因此无法区分哪个处理程序响应某个已记录的消息。
此代码表示只有达到错误级别才会触发主处理程序,然后记录或通过电子邮件发送主处理程序
是的,main
处理程序将收集日志,直到它出现错误(404s除外),然后它将刷新一切到grouped
处理程序,后者又管理所有内容到streamed
和deduplicated
处理程序