如何让 MonoLog 的 ErrorHandler 输出到标准输出?
How can I get MonoLog's ErrorHandler to output to stdout?
我对使用 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
消息会实时弹出,但我感兴趣的日志不会(即使我干净地退出脚本,尽管我会期望他们也实时追加)。但是,两组输出 都是 输出到我有 运行 我的脚本的控制台。
这种实现方式was sourced from this blog article。
更新
在博客文章评论中有一个使用StreamHandler
的替代解决方案,就是这样。它与上面相同,只是更改了 pushHandler()
行:
use Monolog\Handler\StreamHandler;
...
$logger->pushHandler(new StreamHandler("php://stdout"));
这个 是 由 tee
记录的,所以看起来有些标准输出比其他标准输出更平等!我想知道是否有很多标准输出,而 tee
只记录 "real" 一个?就 shell 管道而言,这两种方法有什么区别?
我还没有对此进行测试,因为我的替代解决方案适用于 tee
。但是,最近我怀疑 ErrorLogHandler
实际上将输出发送到 stderr
,而不是 stdout
,这就是为什么 tee
不呈现它的原因。
如果其他人碰到这个,我应该对他们的观察感兴趣。在某些方面,这是一种边缘情况,因为在大多数情况下,错误输出以与非错误输出相同的方式呈现到控制台,并且通常无法区分它们。
我对使用 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
消息会实时弹出,但我感兴趣的日志不会(即使我干净地退出脚本,尽管我会期望他们也实时追加)。但是,两组输出 都是 输出到我有 运行 我的脚本的控制台。
这种实现方式was sourced from this blog article。
更新
在博客文章评论中有一个使用StreamHandler
的替代解决方案,就是这样。它与上面相同,只是更改了 pushHandler()
行:
use Monolog\Handler\StreamHandler;
...
$logger->pushHandler(new StreamHandler("php://stdout"));
这个 是 由 tee
记录的,所以看起来有些标准输出比其他标准输出更平等!我想知道是否有很多标准输出,而 tee
只记录 "real" 一个?就 shell 管道而言,这两种方法有什么区别?
我还没有对此进行测试,因为我的替代解决方案适用于 tee
。但是,最近我怀疑 ErrorLogHandler
实际上将输出发送到 stderr
,而不是 stdout
,这就是为什么 tee
不呈现它的原因。
如果其他人碰到这个,我应该对他们的观察感兴趣。在某些方面,这是一种边缘情况,因为在大多数情况下,错误输出以与非错误输出相同的方式呈现到控制台,并且通常无法区分它们。