LoginSignup
6

More than 5 years have passed since last update.

[Symfony][Monolog]特定のレベルのログは常に出力しつつ、エラー発生時は更に詳細なログを残す方法

Last updated at Posted at 2018-07-05

この記事の目的

  • Symfony3.4
  • Monolog
  • Apache

上記の構成で

  • ERROR発生時はDEBUGログ以上を出力
  • INFOログは常に出力する

のようにログ出力を設定する必要があったのですが、
ググってもそのまま流用できるような情報が無かったので残しておきます。

FingersCrossedHandlerでログ出力レベルを柔軟に

FingersCrossedHandlerを使用すれば、
特定のレベルを超えた場合のみログを出力することができますが、
デフォルトの設定だと正常終了時にログが何も出力されません。

常に出力したいログレベルがある場合は、このハンドラーのオプションで
passthru_levelを指定する必要があります。

また、

ERROR発生時はDEBUGログ以上を出力

こちらを満たすには
fingers_crossedaction_levelerrorを指定、
nestedleveldebugを指定する必要があります。

以下、具体的な設定例になります。

config.ymlに記述した内容

monolog:
    handlers:
        main:
            type: fingers_crossed
            action_level: error
            handler: nested
            passthru_level: info
        nested:
            type: rotating_file
            path: '%kernel.logs_dir%/app.log'
            level: debug
            max_files: 7
        console:
            type: console
            process_psr_3_messages: false

参考

さらに
ERROR以上のログが落ちた場合はINFOログ以上を出したいが、NOTICEログは常に出したいという場合があると思います。

FingersCrossedHandler の constructor を見ると、常にログを落とす最低限のログレベルを指定できるようです。

SymfonyのMonologExtensionでは

この辺でFingersCrossedHandlerの設定をしていて、
常に出力したいログのレベルについては、
passthru_levelで設定できることがわかります。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6