PHP: Как использовать монолог для входа в консоль (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 я приземлился либо на страницу справки для Symphony, либо на вопросы людей, которые ищут способ входа в консоль браузера.

Ответ 1

Решение довольно просто. Так как пример показывает a 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->addWarning('Foo');
$log->addError('Bar');

Надеюсь, это немного сэкономит время:)

Ответ 2

Дополнительные сведения, если вы хотите настроить форматирование сообщений по умолчанию в одно и то же время:

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