PHPでMonologを利用してRollbarにメッセージを送信

Monologを利用してRollbarにメッセージを送信する方法です
ちなみにRollbarとはエラーをモニタリングしてくれるサービスです。(NewRericと類似サービス)

rollbar.com

まずはcomposerを使用してrollbarのクライアントをインストールします。

./composer.json
    "require": {
~略~
        "rollbar/rollbar": "~1.1"
    },

rollbarにアカウントを作成して、access_tokenを取得した上で、以下のように設定するとメッセージをRollbarに送信する事ができるようになります。

<?php
use Rollbar\Rollbar;
use Rollbar\Payload\Level;

Rollbar::init([
    'access_token' => 'xxxxxx',
    'environment' => 'dev',
]);
Rollbar::log(Level::info(), 'testing info level');
try {
    throw new \Exception('test exception');
} catch (\Exception $e) {
    Rollbar::log(Level::error(), $e);
}

次はMonologを利用しようとしてHandlerの一覧を眺めていた所、RollbarHandlerというHandlerが存在したので、これを利用すればすぐ実装できると考えました。
monolog/RollbarHandler.php at master · Seldaek/monolog · GitHub

しかし、RollbarHandlerを参照するとコンストラクタにRollbarNotifierが必要とされます。
RollbarNotifierとは何ぞや・・・とソースをgrepしてもどこにもそんなクラスは存在しません。
更に調べてみると、どうやら古いバージョンのRollbarクライアントには存在したけどここ最近のバージョンからは削除されているようです。

github.com

という事でissueに書いてある通り、RollbarLoggerを使う事にします。

use Rollbar\Rollbar;
use Monolog\Logger;

Rollbar::init([
    'access_token' => 'xxx',
    'environment' => 'dev',
]);
$logger = new Logger('test!');
$psrHandler = new \Monolog\Handler\PsrHandler(Rollbar::logger());
$logger->pushHandler($psrHandler);

$logger->info('test info');
$logger->error('test error');
$logger->crit('test crit');

これでMonologを利用してRollbarにメッセージを送信できるようになりました。
ちなみにalertとnoticeはRollbarにレベルとして存在しないのでエラーとなりますのでご注意です。