Как я могу получить ErrorHandler MonoLog для вывода на стандартный вывод?

Я немного запутался в использовании MongoLog для отправки логов на стандартный вывод. Я использую этот код:

# console/proxy-server.php
require_once '../vendor/autoload.php';

use Monolog\Logger;
use Monolog\Handler\ErrorLogHandler;

// This is for test - it *definitely* goes to stdout!
echo "Hello";

// Here is the logger
$logger = new Logger('stdout');
$logger->pushHandler(new ErrorLogHandler());
$logger->info('Logging');

Строка журнала действительно выводит на консоль, где я запускаю программу, но, похоже, она не переходит в настоящий стандартный вывод. Тем не менее, «Привет» от echo работает отлично.

Я запускаю его из сценария оболочки таким образом:

#!/bin/sh

# Write to both stdout and a log file
php console/proxy-server.php | tee --append proxy.log

Если я использую tail -f proxy.log в другой консоли, то echo сообщение появляется в режиме реального времени, а интересующие меня журналы — нет (даже если я аккуратно выйду из скрипта, хотя я ожидаю, что они тоже будут добавляться в режиме реального времени). Тем не менее, оба набора выходов являются вывод на консоль, в которой я запустил свой скрипт.

Этот подход к реализации был получен из этой статьи блога.

Обновить

В комментариях к статье блога есть альтернативное решение, использующее StreamHandler, что так. Это то же самое, что и выше, за исключением измененного pushHandler() линия:

use Monolog\Handler\StreamHandler;

...

$logger->pushHandler(new StreamHandler("php://stdout"));

это является записан teeТаким образом, похоже, что некоторые stdouts более равны, чем другие! Интересно, есть ли эффективно много stdouts, и tee только записывает «настоящий»? В чем разница между двумя подходами с точки зрения труб оболочки?

1

Решение

Я не проверял это, так как мое альтернативное решение отлично работает с tee, Однако в последнее время я подозреваю, что ErrorLogHandler на самом деле отправляет вывод stderrне stdoutчто было бы почему tee не рендерит это.

Если кто-то еще столкнется с этим, я должен быть заинтересован в их наблюдениях. В некотором смысле это крайний случай, так как в большинстве случаев вывод ошибок выводится на консоль точно так же, как вывод без ошибок, и обычно невозможно отличить разницу.

1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru