How to Configure Monolog to Email Errors

3.6

3.6

Support for emailing errors using Symfony mailer was added in MonologBundle 3.6.

MonologBu​​ndle 3.6 では、Symfony メーラーを使用したエラーのメール送信のサポートが追加されました。

Monolog can be configured to send an email when an error occurs within an application. The configuration for this requires a few nested handlers in order to avoid receiving too many emails. This configuration looks complicated at first but each handler is fairly straightforward when it is broken down.

Monolog は、アプリケーション内でエラーが発生したときに電子メールを送信するように構成できます。この構成には、あまりにも多くの電子メールを受信しないようにするために、いくつかのネストされたハンドラーが必要です。この構成は最初は複雑に見えますが、各ハンドラーは分解するとかなり単純です。
  • YAML
    YAML
  • XML
    XML
  • PHP
    PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# config/packages/prod/monolog.yaml
monolog:
    handlers:
        main:
            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_http_codes: [404]
            handler:      deduplicated
        deduplicated:
            type:    deduplication
            handler: symfony_mailer
        symfony_mailer:
            type:       symfony_mailer
            from_email: 'error@example.com'
            to_email:   'error@example.com'
            # or list of recipients
            # to_email:   ['dev1@example.com', 'dev2@example.com', ...]
            subject:    'An Error Occurred! %%message%%'
            level:      debug
            formatter:  monolog.formatter.html
            content_type: text/html

The main handler is a fingers_crossed handler which means that 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 deduplicated handler.

メイン ハンドラーは finger_crossed ハンドラーです。これは、アクション レベル (この場合はクリティカル) に達したときにのみトリガーされることを意味します。クリティカル レベルは、5xx HTTP コード エラーに対してのみトリガーされます。このレベルに 1 回到達すると、fingers_crossed ハンドラーはレベルに関係なくすべてのメッセージをログに記録します。ハンドラーの設定は、出力が重複排除されたハンドラーに渡されることを意味します。

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.

400 レベルと 500 レベルの両方のエラーでメールをトリガーする場合は、action_level を critical ではなく error に設定します。例については、上記のコードを参照してください。

The deduplicated handler 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). Duplicated records are discarded. Adding this handler reduces the amount of notifications to a manageable level, specially in critical failure scenarios. You can adjust the time period using the time option:

重複排除されたハンドラーは、要求のすべてのメッセージを保持し、ネストされたハンドラーにそれらを一度に渡しますが、レコードが一定期間 (デフォルトでは 60 秒) にわたって一意である場合のみです。重複したレコードは破棄されます。このハンドラーを追加すると、特に重大な障害シナリオで、通知の量が管理可能なレベルに減少します。時間オプションを使用して期間を調整できます。
  • YAML
    YAML
  • XML
    XML
  • PHP
    PHP
1
2
3
4
5
6
7
8
9
# config/packages/prod/monolog.yaml
monolog:
    handlers:
        # ...
        deduplicated:
            type: deduplication
            # the time in seconds during which duplicate entries are discarded (default: 60)
            time: 10
            handler: symfony_mailer

The messages are then passed to the symfony_mailer 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.

その後、メッセージは symfony_mailer ハンドラに渡されます。これは、実際にエラーを電子メールで送信するハンドラーです。この設定は簡単で、宛先アドレスと送信元アドレス、フォーマッタ、コンテンツ タイプ、および件名です。

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:

これらのハンドラーを他のハンドラーと組み合わせて、送信される電子メールだけでなくエラーもサーバーに記録されるようにすることができます。
  • YAML
    YAML
  • XML
    XML
  • PHP
    PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# config/packages/prod/monolog.yaml
monolog:
    handlers:
        main:
            type:         fingers_crossed
            action_level: critical
            handler:      grouped
        grouped:
            type:    group
            members: [streamed, deduplicated]
        streamed:
            type:  stream
            path:  '%kernel.logs_dir%/%kernel.environment%.log'
            level: debug
        deduplicated:
            type:    deduplication
            handler: symfony_mailer
        symfony_mailer:
            type:         symfony_mailer
            from_email:   'error@example.com'
            to_email:     'error@example.com'
            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 deduplicated and the stream handlers. The messages will now be both written to the log file and emailed.

これは、グループ ハンドラーを使用して、メッセージを 2 つのグループ メンバー (重複排除ハンドラーとストリーム ハンドラー) に送信します。メッセージはログ ファイルに書き込まれ、電子メールで送信されます。