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