【问题标题】:Is there a way to get beautified log entry using Monolog?有没有办法使用 Monolog 获得美化的日志条目?
【发布时间】:2018-11-01 08:31:47
【问题描述】:

现在我的代码如下所示:

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 - How to log multiline entries with monolog? 对我来说是这样的:

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

【问题讨论】:

标签: php logging monolog


【解决方案1】:

2.0.0 版本开始,Monolog\Formatter\JsonFormatter 或任何扩展Monolog\Formatter\NormalizerFormatter 的格式化程序通过setJsonPrettyPrint() 支持此功能

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

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

$formatter->addJsonEncodeOption($option);

【讨论】:

    【解决方案2】:

    您可以将 json_encode 与 JSON_PRETTY_PRINT flat 一起使用,如下所示:-

    $beautifiedJsonObjectString = json_encode($data, JSON_PRETTY_PRINT);
    // now you can use the formatted objected as you like
    

    参考:https://www.daveperrett.com/articles/2008/03/11/format-json-with-php/

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-11-28
    • 2014-12-21
    • 2019-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多