簡介
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);