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

2022-08-30 11:59:11

我刚刚切换到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');

但它没有说明如何将消息记录到控制台。在Google上搜索后,我要么登陆Symfony的帮助页面,要么询问人们正在寻找一种登录到浏览器控制台的方法的问题。


答案 1

解决方案相当简单。由于该示例显示了可以传入流(而不是文件的路径)。默认情况下,PHP中回显的所有内容都写入 php://stdout / php://output 因此我们可以简单地使用其中一个作为流:StreamHandlerStreamHandler

<?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');

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


答案 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);

推荐