web-dev-qa-db-ja.com

PHP:monologを使用してコンソール(php:// out)にログインする方法

モノログに切り替えて、メッセージをファイルではなくPHPコンソールに記録したいと思っていました。これは一部の人にとっては明白に思えるかもしれませんが、方法を理解するのに少し時間がかかりましたそれと私はSOで同様の質問/答えを見つけることができませんでした。

MonologのGithub readme の例は、ファイルの使用方法のみを示しています。

<?php

use Monolog\Logger;
use Monolog\Handler\StreamHandler;

// create a log channel
$log = new Logger('name');
$log->pushHandler(new StreamHandler('path/to/your.log', Logger::WARNING)); // <<< uses a file

// add records to the log
$log->addWarning('Foo');
$log->addError('Bar');

ただし、コンソールにメッセージを記録する方法については記載されていません。 Googleで検索した後、Symfonyのヘルプページ、またはブラウザコンソールにログインする方法を探している人々の質問にたどり着きました。

31
Hirnhamster

解決策はかなり単純です。この例ではStreamHandlerを示しているため、(ファイルへのパスの代わりに)ストリームを渡すことができます。デフォルトでは、PHP=にエコーされるすべてが php:// stdout/php:// output に書き込まれるため、これらのいずれかを簡単に使用できます。 StreamHandlerのストリーム:

<?php

use Monolog\Logger;
use Monolog\Handler\StreamHandler;

// create a log channel
$log = new Logger('name');
$log->pushHandler(new StreamHandler('php://stdout', Logger::WARNING)); // <<< uses a stream

// add records to the log
$log->warning('Foo');
$log->error('Bar');

これが誰かの時間を節約することを願っています:)

60
Hirnhamster

デフォルトのメッセージフォーマットを同時に微調整する場合の詳細:

use Monolog\Logger;
use Monolog\Formatter\LineFormatter;
use Monolog\Handler\StreamHandler;

$output = "[%datetime%] %channel%.%level_name%: %message%\n";
$formatter = new LineFormatter($output);

$streamHandler = new StreamHandler('php://stdout', Logger::DEBUG);
$streamHandler->setFormatter($formatter);

$logger = new Logger('LoggerName');
$logger->pushHandler($streamHandler);
13
Justin Tilson