首页 > 解决方案 > 有没有办法使用 Monolog 获得美化的日志条目?

问题描述

现在我的代码如下所示:

use Monolog\Logger;
use Monolog\Handler\StreamHandler;

$ipAddress = GeoIp\Manager::getRealIp();
$geoResult = GeoIp\Manager::getDataResult($ipAddress, 'ru');

$logger = new Logger('Debug');
$logger->pushHandler(new StreamHandler($_SERVER['DOCUMENT_ROOT'].'/logs/geo.log', Logger::DEBUG));
$logger->info('Location:', array('object' => print_r($geoResult, true)));

结果,我有一行日志条目。我尝试使用JsonFormatter,但只是格式化数据结构并继续打印一行记录,当我想要几行人类可读的美化数据表示时。

更新:

我后来在这里找到了解决方案。Symfony2 - 如何使用独白记录多行条目?对我来说,它看起来像这样:

use Monolog\Logger;
use Monolog\Handler\StreamHandler;
use Monolog\Formatter\LineFormatter;

$ipAddress = GeoIp\Manager::getRealIp();
$geoResult = GeoIp\Manager::getDataResult($ipAddress, 'ru');

$formatter = new LineFormatter(null, null, true);

$stream = new StreamHandler($_SERVER['DOCUMENT_ROOT'].'/logs/geo.log', Logger::DEBUG);
$stream->setFormatter($formatter);

$logger = new Logger('Debug');
$logger->pushHandler($stream);
$logger->info('Location:', array('object' => print_r($geoResult, true)));

标签: phploggingmonolog

解决方案


由于版本2.0.0theMonolog\Formatter\JsonFormatter或任何扩展的格式化程序Monolog\Formatter\NormalizerFormatter通过setJsonPrettyPrint()

$formatter = new JsonFormatter();
$formatter->setJsonPrettyPrint(true);

如果需要,还有一个更通用的 JSON 编码选项

$formatter->addJsonEncodeOption($option);

推荐阅读