PHP:如何使用独白登录到控制台(php://out)?

Posted

技术标签:

【中文标题】PHP:如何使用独白登录到控制台(php://out)?【英文标题】:PHP: How to use monolog to log to console (php://out)? 【发布时间】:2014-11-05 09:23:44 【问题描述】:

我刚刚切换到 monolog,想将我的消息记录到 php 控制台而不是文件。这对某些人来说似乎很明显,但我花了一点时间才弄清楚如何做到这一点,而且我在 SO 上找不到类似的问题/答案。

Monolog's 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 上搜索后,我找到了 Symfony 的帮助页面,或者是人们正在寻找登录浏览器控制台的方法。

【问题讨论】:

【参考方案1】:

解决方案相当简单。由于示例显示了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->warning('Foo');
$log->error('Bar');

希望这可以节省一些时间:)

【讨论】:

这可行,但是我想知道如何归档两者,即在控制台中显示输出并写入文件? @mahen3d 添加另一个处理程序为您执行此操作 ($log-&gt;pushHandler(new StreamHandler('/path/to/log/file', Logger::NOTICE)))【参考方案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);

【讨论】:

以上是关于PHP:如何使用独白登录到控制台(php://out)?的主要内容,如果未能解决你的问题,请参考以下文章

如何将 swiftmailer 处理程序与独白一起使用

如何使用格式化数组之类的独白记录多行条目?

如何使用 php web 服务成功登录

如何使用 PHP/IIS 读取 Windows 登录用户名

如何不在独白日志行中显示最后一个括号?

尝试在laravel中测试facebook sdk时的权限问题