Handler 的繼承關係如下(使用 YAML 表示):
- HandlerInterface: - AbstractHandler: - AbstractProcessingHandler: - AbstractSyslogHandler: - SyslogHandler - SyslogUdpHandler - AmqpHandler - BrowserConsoleHandler - ChromePHPHandler - CouchDBHandler - CubeHandler - DoctrineCouchDBHandler - DynamoDbHandler - ElasticSearchHandler - ErrorLogHandler - FirePHPHandler - GelfHandler - IFTTTHandler - LogglyHandler - MailHandler: - MandrillHandler - NativeMailerHandler - SwiftMailerHandler - MongoDBHandler - NewRelicHandler - PHPConsoleHandler - RavenHandler - RedisHandler - RollbarHandler - SlackbotHandler - SlackWebhookHandler - SocketHandler: - FleepHookHandler - FlowdockHandler - HipChatHandler - LogEntriesHandler - PushoverHandler - SlackHandler - StreamHandler: - RotatingFileHandler - TestHandler - ZendMonitorHandler - BufferHandler: - DeduplicationHandler - FilterHandler - FingersCrossedHandler - GroupHandler: - WhatFailureGroupHandler - NullHandler - PsrHandler - SamplingHandler - HandlerWrapper
|
洋洋灑灑列出一長串的 Class 名稱,大部分是單純實作服務的串接,有另一小部分的 Handler 是有特殊用途的,撿幾個來介紹。
TestHandler
這個 Handler 是設計用來做測試的,比方說:
$logger = new \Monolog\Logger('name');
$handler = new \Monolog\Handler\TestHandler();
$logger->pushHandler($handler);
$logger->warning('test');
var_dump($handler->hasAlertRecords()); var_dump($handler->hasWarningRecords());
|
這樣輸出的結果會是:
它可以作為一個 spy,去確認寫到 Logger 的內容是正確的。
它的設計方法也很單純,在 write 去寫入一個陣列:
protected function write(array $record) { $this->recordsByLevel[$record['level']][] = $record; $this->records[] = $record; }
|
而在 assertion 的方法去找陣列有沒有對應的值即可,非常厲害。
GroupHandler
這可以把多個 Handler 集合成一個 Group,而對這個 Group 操作,就等於對全部的 Handler 操作。
NullHandler
它的說明很有趣:
Blackhole
所有的 Log 將會像是遇到無底洞一樣,全部被這個 Handler 吃光光。
這也是設計用來測試用的。
PsrHandler
覺得 Monolog 不好,但有中意其他 PSR Logger。雖然傷心寂寞覺得冷,但還是可以考慮用 Monolog 的 PsrHandler 包裝其他 PSR Logger 哦。