如何在Monolog中使用DeduplicationHandler?

问题描述 投票:0回答:1

我是 Monolog 的新手,但我已经发现它非常有用。但我想消除一些重复的内容。

我找不到任何在 PHP 脚本的 Monolog 中使用

DeduplicationHandler
的示例。我已经读过它以及它所需要的论据,但我无法让它发挥作用。
我收到错误了

construct() 必须实现接口 Monolog\Handler\HandlerInterface,给定 null

但是弄清楚如何实现它。

使用它会是这样吗?

require __DIR__ . '/vendor/autoload.php';
use Monolog\Handler\StreamHandler;
use Monolog\Handler\HandlerInterface;
use Monolog\Handler\DeduplicationHandler;
use Monolog\Logger;
    
$logger = new Logger('user_pg');
$logger->pushHandler(new StreamHandler(__DIR__ . '/log/user.log', Logger::DEBUG));
$handler = $logger->pushHandler(new HandlerInterface( __DIR__ . '/log/duplicates.log', Logger::ERROR));
$logger->pushHandler(new DeduplicationHandler($handler, 
$deduplicationStore = __DIR__ . '/log/duplicates.log', 
$deduplicationLevel = Logger::ERROR, $time = 60, $bubble = true));

我显然是在黑暗中拍摄,因为我找不到任何在这样的 PHP 脚本中使用它的示例。

logging duplicates monolog
1个回答
1
投票

DeduplicationHandler 的工作方式类似于您希望应用重复数据删除的处理程序的包装器。在您的情况下,您将提供 StreamHandler 作为重复数据删除处理程序的第一个参数。我修改了您的代码来演示这一点。

<?php

require __DIR__ . '/vendor/autoload.php';
use Monolog\Handler\StreamHandler;
use Monolog\Handler\DeduplicationHandler;
use Monolog\Logger;

$logger = new Logger('user_pg');

$streamHandler = new StreamHandler(__DIR__ . '/log/user.log', Logger::DEBUG);
$logger->pushHandler(new DeduplicationHandler($streamHandler, __DIR__ . '/log/duplicates.log', Logger::ERROR, 60, true));
© www.soinside.com 2019 - 2024. All rights reserved.