monolog 日誌記錄器解析

blabla發表於2019-11-28

簡介

monolog是基於psr-3設計的日誌記錄元件。

monolog抽象層

Logger

日誌記錄總控類,相當於CEO。CEO通過pushHandler和pushProcessor控制handler和processor出入棧排兵佈陣。

handler的種類豐富,以下例舉部分:
  • ElasticesearchHandler
  • ErrorLogHandler
  • PHPConsoleHandler
  • NullHandler
  • .....
processor的種類也不少
  • GitProcessor 將git分支資訊和提交資訊加入到記錄($record)中
  • HostnameProcessor 在記錄中加入hostname資訊
  • .....

Handler

handler是monolog的日誌操手,相當於日誌記錄分部老大。處理日誌記錄的具體事項。

AbstractProcessingHandler抽象類

一般情況下,handler都需繼承AbstractProcessingHandler抽象類。該類提供handler所必須的方法,實現ProcessableHandlerInterface和FormattableHandlerInterface介面以將handler與processor及formatter聯絡起來。

abstract class AbstractProcessingHandler extends AbstractHandler implements ProcessableHandlerInterface, FormattableHandlerInterface
{
    use ProcessableHandlerTrait;
    use FormattableHandlerTrait;
    ......
}

繼承該類後,通過handler也可以實現出入棧processor和formatter

  public function pushProcessor(callable $callback): HandlerInterface
    {
        array_unshift($this->processors, $callback);

        return $this;
    }

Formatter

formatter用於資料的格式化,往往不同的handler有各自不同的formatter。

Processor

processor是支援部門,用來追加一些額外的記錄。
你可以自定義processor

$logger->pushProcessor(function($record){
        $record['extra']['foo'] = 'bar';
        return $record;
    });

也可以使用monoglog自帶的
HostnameProcessor類實現了invoke靜態方法,當嘗試以呼叫函式的方式呼叫一個物件時,invoke方法會被自動呼叫。

$logger->pushProcessor(new \Monolog\Processor\HostnameProcessor);

相關文章