Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/245.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何获得独白';要输出到标准输出的错误处理程序?_Php_Shell_Stdout_Monolog - Fatal编程技术网

Php 如何获得独白';要输出到标准输出的错误处理程序?

Php 如何获得独白';要输出到标准输出的错误处理程序?,php,shell,stdout,monolog,Php,Shell,Stdout,Monolog,我对使用MongoLog将日志发送到stdout有点困惑。我正在使用以下代码: # 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 l

我对使用MongoLog将日志发送到stdout有点困惑。我正在使用以下代码:

# 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中的“Hello”可以正常工作

我从shell脚本启动它,因此:

#!/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
记录的,因此看起来有些标准输出比其他标准输出更平等!我想知道是否有很多标准输出,而
tee
只记录“真实”的标准输出?就壳管而言,这两种方法的区别是什么?

我还没有对此进行测试,因为我的替代解决方案可以与
tee
配合使用。然而,最近我怀疑
ErrorLogHandler
实际上是将输出发送到
stderr
,而不是
stdout
,这就是
tee
没有呈现它的原因

如果有人碰到这个问题,我应该对他们的观察结果感兴趣。在某些方面,这是一种边缘情况,因为在大多数情况下,错误输出以与非错误输出相同的方式呈现到控制台,并且通常无法区分差异