Monolog
ログレベルはRFC 5424に対応
コンセプト
ロガーは次を持つ
channel(単なる名前)
handlerのスタック
ロガーにレコードを加えたら、ハンドラのスタックにログが通知される
各ハンドラはレコードををすべてハンドルするか決める
もし完全にハンドルするならレコードの伝播はそこでおしまいになる
このようなコンセプトによって、フレキシブルなルギングができるようになる
フレキシブルなロギングの例
2つのハンドラがあるとする
すべてのログをdiskに書き出すStreamHandler
エラーメッセージがログに出力されたときだけメールを送るMailHandler
いま、スタックに次のような順番でハンドラが入っているとする
MailHandler(スタックの一番上)
StreamHandler(スタックの一番下)
handlerは$bubbleというプロパティをもっている
コードをhandleした際に、それをブロックするかどうかを決定するプロパティ
例:MailHandlerの$bubbleがfalseなら、このハンドラによって処理されたレコードはStreamHandlerにはわたされない
複数のLoggerをつくるときにはchannelをつかってどのロガーからでたログなのかを識別する
Loggerはそれぞれがchannelを定義している
channelはレコードがアプリケーションのどの部分で出力されるか識別するのに便利なもの
channelは様々なhandlerと組み合わせることができる
どうやって?kadoyau.icon
channelはログに反映されるので、recordを簡単に見たりフィルターしたりできる
各handlerはformatterをもっている
handlerがうけたログのレコードに対して標準化とフォーマットをする役割
どういう情報を出したいかによってカスタムできる
もし指定しなければデフォルトのものが使われる
ただし、手を入れたい場合(ソートの方法をかえたいとか)は次のような拡張性がある
handleする前にLoggerでextra infomationを加えることができる
LoggerにProcessorsを追加できる
何ができる?kadoyau.icon
Logのrecordの構造