iT邦幫忙

2018 iT 邦幫忙鐵人賽
DAY 17
1
Software Development

輪子們,聽口令,大部分解開始!系列 第 17

Monolog(6)--Handler 之間的關係

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());

這樣輸出的結果會是:

bool(false)
bool(true)

它可以作為一個 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 哦。


上一篇
Monolog(5)--Handler 不要亂玩 Processor 啊
系列文
輪子們,聽口令,大部分解開始!17
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言