1

本当に些細なことであるに違いありませんが、symfony2でいくつかのエラー(5xx)を電子メールで送信し、残り(情報レベル)をファイルに記録することはできません。

これが私が持っているもので、 symfony2クックブックの例のほぼ正確なコピーです。

# 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エラーを電子メールで送信しますが、404エラーもアプリケーション情報メッセージもprod.logに表示されません

4

2 に答える 2

3

では、動作が異なる2つのハンドラーが必要ですか?次に、接続されていない2つのハンドラーを使用します。

# 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

ご覧のとおり、グループ化されたハンドラーを削除し、メインにストリームを使用するように指示し、アクションレベルをバッファリングされた「分割」に追加して、ストリームとSwiftの処理を分割し、両方に異なるアクションを定義できるようにします。

このロガーを使用すると、エラーメッセージが電子メールで送信されるだけで、fingers_crossedタイプが設定されている場合のような完全なログは表示されません。必要に応じてfingers_crossed、別のハンドラーを追加するだけです。

another_main:
    type:         fingers_crossed
    action_level: critical
    handler:      buffered

もちろんaction_level、バッファリングされたからを再度削除する必要があります。

于 2012-09-04T04:25:56.210 に答える
1

クックブックの例から:

メールハンドラーはfingers_crossedハンドラーです。これは、アクションレベル(この場合はクリティカル)に達したときにのみトリガーされることを意味します。次に、アクションレベルより下のメッセージを含むすべてをログに記録します。クリティカルレベルは、5xxHTTPコードエラーに対してのみトリガーされます。ハンドラー設定は、出力がバッファーに入れられたハンドラーに渡されることを意味します

再びクックブックから:

400レベルと500レベルの両方のエラーで電子メールをトリガーする場合は、action_levelをクリティカルではなくエラーに設定します。

于 2012-09-03T15:33:19.573 に答える