-
-
Notifications
You must be signed in to change notification settings - Fork 5.1k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Updating recommended email settings for monolog #6587
Closed
Closed
Changes from 2 commits
Commits
Show all changes
3 commits
Select commit
Hold shift + click to select a range
File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -25,18 +25,20 @@ it is broken down. | |
# action_level: error | ||
# excluded_404s: | ||
# - ^/ | ||
handler: buffered | ||
buffered: | ||
type: buffer | ||
handler: deduplicated | ||
deduplicated: | ||
type: deduplication | ||
handler: swift | ||
swift: | ||
type: swift_mailer | ||
from_email: '[email protected]' | ||
to_email: '[email protected]' | ||
# or list of recipients | ||
# to_email: ['[email protected]', '[email protected]', ...] | ||
subject: An Error Occurred! | ||
subject: 'An Error Occurred! %%message%%' | ||
level: debug | ||
formatter: monolog.formatter.html | ||
content_type: text/html | ||
|
||
.. code-block:: xml | ||
|
||
|
@@ -49,8 +51,9 @@ it is broken down. | |
http://symfony.com/schema/dic/monolog http://symfony.com/schema/dic/monolog/monolog-1.0.xsd"> | ||
|
||
<monolog:config> | ||
<!-- | ||
To also log 400 level errors (but not 404's): | ||
<!-- | ||
500 errors are logged at the critical level, | ||
to also log 400 level errors (but not 404's): | ||
action-level="error" | ||
And add this child inside this monolog:handler | ||
<monolog:excluded-404>^/</monolog:excluded-404> | ||
|
@@ -59,23 +62,25 @@ it is broken down. | |
name="mail" | ||
type="fingers_crossed" | ||
action-level="critical" | ||
handler="buffered" | ||
handler="deduplicated" | ||
/> | ||
<monolog:handler | ||
name="buffered" | ||
type="buffer" | ||
name="deduplicated" | ||
type="deduplication" | ||
handler="swift" | ||
/> | ||
> | ||
<monolog:handler | ||
name="swift" | ||
type="swift_mailer" | ||
from-email="[email protected]" | ||
subject="An Error Occurred!" | ||
level="debug"> | ||
subject="An Error Occurred! %%message%%" | ||
level="debug" | ||
formatter="monolog.formatter.html" | ||
content-type="text/html"> | ||
|
||
<monolog:to-email>[email protected]</monolog:to-email> | ||
|
||
<!-- or multiple to-email elements --> | ||
<!-- or list of recipients --> | ||
<!-- | ||
<monolog:to-email>[email protected]</monolog:to-email> | ||
<monolog:to-email>[email protected]</monolog:to-email> | ||
|
@@ -92,26 +97,29 @@ it is broken down. | |
'handlers' => array( | ||
'mail' => array( | ||
'type' => 'fingers_crossed', | ||
// 500 errors are logged at the critical level | ||
'action_level' => 'critical', | ||
// to also log 400 level errors (but not 404's): | ||
// 'action_level' => 'error', | ||
// 'excluded_404s' => array( | ||
// '^/', | ||
// ), | ||
'handler' => 'buffered', | ||
'handler' => 'deduplicated', | ||
), | ||
'buffered' => array( | ||
'type' => 'buffer', | ||
'deduplicated' => array( | ||
'type' => 'deduplication', | ||
'handler' => 'swift', | ||
), | ||
'swift' => array( | ||
'type' => 'swift_mailer', | ||
'from_email' => '[email protected]', | ||
'to_email' => '[email protected]', | ||
'type' => 'swift_mailer', | ||
'from_email' => '[email protected]', | ||
'to_email' => '[email protected]', | ||
// or a list of recipients | ||
// 'to_email' => array('[email protected]', '[email protected]', ...), | ||
'subject' => 'An Error Occurred!', | ||
'level' => 'debug', | ||
'subject' => 'An Error Occurred! %%message%%', | ||
'level' => 'debug', | ||
'formatter' => 'monolog.formatter.html', | ||
'content_type' => 'text/html', | ||
), | ||
), | ||
)); | ||
|
@@ -121,20 +129,23 @@ it is only triggered when the action level, in this case ``critical`` is reached | |
The ``critical`` level is only triggered for 5xx HTTP code errors. If this level | ||
is reached once, the ``fingers_crossed`` handler will log all messages | ||
regardless of their level. The ``handler`` setting means that the output | ||
is then passed onto the ``buffered`` handler. | ||
is then passed onto the ``deduplicated`` handler. | ||
|
||
.. tip:: | ||
|
||
If you want both 400 level and 500 level errors to trigger an email, | ||
set the ``action_level`` to ``error`` instead of ``critical``. See the | ||
code above for an example. | ||
|
||
The ``buffered`` handler simply keeps all the messages for a request and | ||
then passes them onto the nested handler in one go. If you do not use this | ||
handler then each message will be emailed separately. This is then passed | ||
to the ``swift`` handler. This is the handler that actually deals with | ||
emailing you the error. The settings for this are straightforward, the | ||
to and from addresses and the subject. | ||
The ``deduplicated`` handler simply keeps all the messages for a request and | ||
then passes them onto the nested handler in one go, but only if the records are | ||
unique over a given period of time (60 seconds by default). If the records are | ||
duplicates they are simply discarded. Adding this handler reduces the amount of | ||
notifications to a manageable level, specially in critical failure scenarios. | ||
The messages are then passed to the ``swift`` handler. This is the handler that | ||
actually deals with emailing you the error. The settings for this are | ||
straightforward, the to and from addresses, the formatter, the content type | ||
and the subject. | ||
|
||
You can combine these handlers with other handlers so that the errors still | ||
get logged on the server as well as the emails being sent: | ||
|
@@ -160,20 +171,22 @@ get logged on the server as well as the emails being sent: | |
handler: grouped | ||
grouped: | ||
type: group | ||
members: [streamed, buffered] | ||
members: [streamed, deduplicated] | ||
streamed: | ||
type: stream | ||
path: '%kernel.logs_dir%/%kernel.environment%.log' | ||
level: debug | ||
buffered: | ||
type: buffer | ||
deduplicated: | ||
type: deduplication | ||
handler: swift | ||
swift: | ||
type: swift_mailer | ||
from_email: '[email protected]' | ||
to_email: '[email protected]' | ||
subject: An Error Occurred! | ||
subject: 'An Error Occurred! %%message%%' | ||
level: debug | ||
formatter: monolog.formatter.html | ||
content_type: text/html | ||
|
||
.. code-block:: xml | ||
|
||
|
@@ -196,25 +209,36 @@ get logged on the server as well as the emails being sent: | |
type="group" | ||
> | ||
<member type="stream"/> | ||
<member type="buffered"/> | ||
<member type="deduplicated"/> | ||
</monolog:handler> | ||
<monolog:handler | ||
name="stream" | ||
path="%kernel.logs_dir%/%kernel.environment%.log" | ||
level="debug" | ||
/> | ||
<monolog:handler | ||
name="buffered" | ||
type="buffer" | ||
name="deduplicated" | ||
type="deduplication" | ||
handler="swift" | ||
/> | ||
<monolog:handler | ||
name="swift" | ||
type="swift_mailer" | ||
from-email="[email protected]" | ||
to-email="[email protected]" | ||
subject="An Error Occurred!" | ||
subject="An Error Occurred! %%message%%" | ||
level="debug" | ||
/> | ||
formatter="monolog.formatter.html" | ||
content-type="text/html"> | ||
|
||
<monolog:to-email>[email protected]</monolog:to-email> | ||
|
||
<!-- or list of recipients --> | ||
<!-- | ||
<monolog:to-email>[email protected]</monolog:to-email> | ||
<monolog:to-email>[email protected]</monolog:to-email> | ||
... | ||
--> | ||
</monolog:handler> | ||
</monolog:config> | ||
</container> | ||
|
||
|
@@ -230,29 +254,33 @@ get logged on the server as well as the emails being sent: | |
), | ||
'grouped' => array( | ||
'type' => 'group', | ||
'members' => array('streamed', 'buffered'), | ||
'members' => array('streamed', 'deduplicated'), | ||
), | ||
'streamed' => array( | ||
'type' => 'stream', | ||
'path' => '%kernel.logs_dir%/%kernel.environment%.log', | ||
'level' => 'debug', | ||
), | ||
'buffered' => array( | ||
'type' => 'buffer', | ||
'handler' => 'swift', | ||
'deduplicated' => array( | ||
'type' => 'deduplication', | ||
'handler' => 'swift', | ||
), | ||
'swift' => array( | ||
'type' => 'swift_mailer', | ||
'from_email' => '[email protected]', | ||
'to_email' => '[email protected]', | ||
'subject' => 'An Error Occurred!', | ||
'level' => 'debug', | ||
'type' => 'swift_mailer', | ||
'from_email' => '[email protected]', | ||
'to_email' => '[email protected]', | ||
// or a list of recipients | ||
// 'to_email' => array('[email protected]', '[email protected]', ...), | ||
'subject' => 'An Error Occurred! %%message%%', | ||
'level' => 'debug', | ||
'formatter' => 'monolog.formatter.html', | ||
'content_type' => 'text/html', | ||
), | ||
), | ||
)); | ||
|
||
This uses the ``group`` handler to send the messages to the two | ||
group members, the ``buffered`` and the ``stream`` handlers. The messages will | ||
group members, the ``deduplicated`` and the ``stream`` handlers. The messages will | ||
now be both written to the log file and emailed. | ||
|
||
.. _Monolog: https://github.com/Seldaek/monolog |
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I would add a blank line before this sentence to have it rendered as its own paragraph to improve readability.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Done!