我试图记录一个请求,我们通过口香糖发送,这是深嵌套(高达10-11的深度,准确地说)。
用Monolog记录请求的结果是:
超过9层深度,中止正常化
在深嵌套属性上。
代码非常简单
// $requestData being the data I am sending via guzzle.
Log::info("Ekart Booking API:", $requestData);有什么方法可以增加单曲的归一化深度吗?
发布于 2020-04-30 06:45:18
您可以json_encode它:
Log::info("Ekart Booking API:" . json_encode($requestData));发布于 2022-01-13 15:08:12
你可以玩这个,它会改变它找到的每个格式化程序上的NormalizerFormatter::$maxNormalizeDepth (这可能不是你想要的)
if ($logger instanceof \Monolog\Logger) {
foreach ($logger->getHandlers() as $handler) {
if ($handler instanceof \Monolog\Handler\FormattableHandlerInterface) {
$formatter = $handler->getFormatter();
if ($formatter instanceof \Monolog\Formatter\NormalizerFormatter) {
$formatter->setMaxNormalizeDepth(50);
}
}
}
}发布于 2022-05-20 14:57:03
既然您标记了Laravel,下面是如何通过配置日志格式化程序来解决Laravel中的这个问题。
https://laravel.com/docs/9.x/logging#customizing-monolog-for-channels
将配置更改为如下所示:
'single' => [
'driver' => 'single',
'tap' => [App\Logging\CustomizeFormatter::class],
'path' => storage_path('logs/laravel.log'),
'level' => 'debug',
],然后根据Axi的答案创建一个具有以下内容的CustomzeFormatter类。
<?php
namespace App\Logging;
use Monolog\Formatter\LineFormatter;
class CustomizeFormatter
{
public function __invoke($logger)
{
foreach ($logger->getHandlers() as $handler) {
if ($handler instanceof \Monolog\Handler\FormattableHandlerInterface) {
$formatter = $handler->getFormatter();
if ($formatter instanceof \Monolog\Formatter\NormalizerFormatter) {
$formatter->setMaxNormalizeDepth(50);
}
}
}
}
}https://stackoverflow.com/questions/61506856
复制相似问题