MonologのSlackHandlerでSlackに通知する


SlackHandlerが追加

2014/9/30に、Monologの1.11.0がリリースされました。
https://packagist.org/packages/monolog/monolog#1.11.0

新たにSlackHandlerが追加されていたので、早速試してみました。
https://github.com/Seldaek/monolog/pull/377

SlackHandlerの導入

packagistにあるように、monologの1.11.0をrequireします。

$ php composer.phar require monolog/monolog: ~1.11.0

composer.jsonは以下のようになります。

導入方法としては、Monolog/LoggerにSlackHandlerをpushHandlerするだけです。
https://github.com/Seldaek/monolog/pull/377#issuecomment-52928937

Silexだと、以下のようになります。
ちなみに「channel」は「#」付きで指定します。

$app['monolog']->pushHandler(
    new Monolog\Handler\SlackHandler(
        $slackOption['token'], $slackOption['channel'], $slackOption['username']
        true, null, Monolog\Logger::NOTICE, true
    )
);

※1.11.dev-masterから1.11.0の間に、コンストラクターの引数が変更になっているので注意してください。
Move iconEmoji param upfront since Slack was never in a stable release

Slack APIトークンの生成

(2015/09/26更新)
https://api.slack.com/web#authentication
にて、APIトークンを生成します。
詳しくは、こちらを参考に
http://qiita.com/ogawatachi/items/c89b1e92e877ef6b0698

Slackへの通知

あとはloggerにて、メッセージを出力するだけです。
Silexだと、以下のようになるかと。

$app->log('test', [], Monolog\Logger::CRITICAL);

期待通り動作すれば、下記のように指定したチャンネルに通知が届きます。

雑感

仕事で、Hipchatを使っていますが、エンジニアだけだったら何の躊躇もなく、Slackに移行できると思います。
Slackを使い始めたばかりではありますが、Hipchatとくらべて気に入っている点は以下のとおりです。

  • 発言者にアイコンがでる
  • 外部連携が豊富で、導入が簡単
  • コードスニペット

大量に通知されるとタイムラインを占領してしまいそうなので、チャンネルを分けたり、通知するログレベルを適切に設定したりするなど、運用上は工夫が必要そうです。
あと、monologの1.11が正式リリースされたら、composerの設定直さないといけないですね。(1.11にあわせて変更しました)