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

Hir*_*ter 26 php console stdout monolog

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

Monolog的Github自述文件中的示例仅显示如何使用文件:

<?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');
Run Code Online (Sandbox Code Playgroud)

但它没有说明如何将消息记录到控制台.在谷歌上搜索之后,我登陆了Symphony的帮助页面,或者是寻找登录浏览器控制台的人的问题.

Hir*_*ter 64

解决方案相当简单.由于该示例显示StreamHandler可以传入流(而不是文件的路径).默认情况下,在PHP中回显的所有内容都写入php:// stdout/php://输出,因此我们可以简单地将其中一个用作以下内容的流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');
Run Code Online (Sandbox Code Playgroud)

希望这能节省一些时间:)

  • @mahen3d 添加另一个处理程序来为你做这件事 (```$log-&gt;pushHandler(new StreamHandler('/path/to/log/file', Logger::NOTICE))```) (2认同)

Jus*_*son 15

如果要同时调整默认邮件格式,请参阅一些额外的详细信息:

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);
Run Code Online (Sandbox Code Playgroud)