[PHP]Monologで標準出力や標準エラー出力にログを吐く

ファイル名を書く代わりに "php://stdout" とか書けばいけます。
use Monolog\Logger;
use Monolog\Handler\StreamHandler;

$log = new Logger('mychanel');
$handler1 = new StreamHandler('php://stdout', Logger::DEBUG);
$handler2 = new StreamHandler('php://stderr', Logger::DEBUG);

$log->pushHandler($handler1);
$log->pushHandler($handler2);

$log->info("hello world");
実行結果
$ php use-monolog.php
[2014-08-29 03:32:24] mychanel.INFO: hello world [] []
[2014-08-29 03:32:24] mychanel.INFO: hello world [] []
同じものが2行表示されてるように見えますが、1行目が標準出力で2行目が標準エラー出力に吐かれています。

ちなみに、pushHandler()を1度も呼ばなかった場合は暗黙のうちに "new StreamHandler('php://stderr', Logger::DEBUG)"がハンドラとして登録されるようです。
$log = new Logger('mychanel');
$log->debug("hello world"); // 標準エラー出力に吐かれる
この挙動はドキュメントにははっきり書かれていませんがソースコードを見ればよくわかります。
https://github.com/Seldaek/monolog/blob/master/src/Monolog/Logger.php#L229
カテゴリ:

人気記事