eonx-com/easy-logging

轻松创建和配置Monolog日志记录器

6.0.0 2024-08-27 10:51 UTC

This package is auto-updated.

Last update: 2024-09-19 04:49:17 UTC


README

---eonx_docs--- 标题:介绍 重量:0 ---eonx_docs---

此包允许您以集中和可重用的方式创建和配置Monolog日志记录器

  • 使用PHP配置通道
  • 控制处理器和处理器顺序
  • 与流行框架集成(例如Laravel,Symfony)
  • 自动发现应用程序中的处理器和处理器

需要包(Composer)

安装此包的推荐方法是使用Composer

$ composer require eonx-com/easy-logging

用法

以下是一个如何使用LoggerFactoryInterface创建日志记录器的简单示例

// Instantiate the logger factory manually or use DI ...

$default = $loggerFactory->create(); // Calling create without arguments will create logger for default channel

$console = $loggerFactory->create('console'); // Create logger for console channel specifically

框架中的用法

此包提供的不同集成默认会注册默认通道的日志记录器,在服务容器中以下服务ID下

  • Psr\Log\LoggerInterface
  • logger

您可以在任何需要的地方使用依赖注入!

感谢Symfony中的通过setter自动注入,您可以使用\EonX\EasyLogging\Logger\LoggerAwareTrait来简化Psr\Log\LoggerInterface的注入。


日志记录器配置

LoggerFactoryInterface允许您设置不同的"配置提供者"集合,每个配置可以定义

  • 通道:如果定义,则配置将仅应用于指定的通道,如果为null,则配置将应用于所有通道
  • 优先级:定义每个配置必须在日志记录器实例上设置的顺序,优先级越高,配置添加到日志记录器实例的顺序越晚

处理器配置

HandlerConfigInterface允许您配置要由工厂创建的\Monolog\Handler\HandlerInterface。与其他配置一样,它允许您指定此处理器适用于哪些通道,以及控制处理器何时必须执行的优先级。

要通知日志记录器工厂您的HandlerConfigInterface,您必须使用HandlerConfigProviderInterface。日志记录器工厂通过setHandlerConfigProviders()方法接受提供者的集合。

use EonX\EasyLogging\Factory\LoggerFactory;

$handlerConfigProviders = [];

// Add your own handler config providers to $handlerConfigProviders ...

$loggerFactory = new LoggerFactory();

// Set your handler config providers on the logger factory
$loggerFactory->setHandlerConfigProviders($handlerConfigProviders);

以下是一个注册StreamHandlerHandlerConfigProviderInterface的简单示例

namespace App\Logger;

use EonX\EasyLogging\Config\HandlerConfig;
use EonX\EasyLogging\Provider\HandlerConfigProviderInterface;
use Monolog\Handler\StreamHandler;

final class StreamHandlerConfigProvider implements HandlerConfigProviderInterface
{
    /**
     * @return iterable<\EonX\EasyLogging\Config\HandlerConfigInterface>
     */
    public function handlers(): iterable
    {
        /**
         * This method returns an iterable to make it easier to handle complex handler configs definition
         * But you can simply return an array if you want.
         */

        yield new HandlerConfig(new StreamHandler('php://stdout'));
    }
}

处理器配置

ProcessorConfigInterface允许您配置要由工厂创建的\Monolog\Processor\ProcessorInterface。与其他配置一样,它允许您指定此处理器适用于哪些通道,以及控制处理器何时必须执行的优先级。

要通知日志记录器工厂您的ProcessorConfigInterface,您必须使用ProcessorConfigProviderInterface。日志记录器工厂通过setProcessorConfigProviders()方法接受提供者的集合。

use EonX\EasyLogging\Factory\LoggerFactory;

$processorConfigProviders = [];

// Add your own processor config providers to $handlerConfigProviders ...

$loggerFactory = new LoggerFactory();

// Set your processor config providers on the logger factory
$loggerFactory->setProcessorConfigProviders($processorConfigProviders);

以下是一个注册TagProcessorProcessorConfigProviderInterface的简单示例

namespace App\Logger;

use EonX\EasyLogging\Config\ProcessorConfig;
use EonX\EasyLogging\Provider\ProcessorConfigProviderInterface;
use Monolog\Processor\TagProcessor;

final class TagProcessorConfigProvider implements ProcessorConfigProviderInterface
{
    /**
     * @return iterable<\EonX\EasyLogging\Config\ProcessorConfigInterface>
     */
    public function processors(): iterable
    {
        /**
         * This method returns an iterable to make it easier to handle complex processor configs definition
         * But you can simply return an array if you want.
         */

        yield new ProcessorConfig(new TagProcessor(['tag-1', 'tag-2']));
    }
}

日志记录器配置器

\Monolog\Logger类有方法允许您进一步配置它(例如使用微秒)。为了处理这种情况,日志记录器工厂接受一个LoggerConfiguratorInterface的集合。

要通知日志记录器工厂您的LoggerConfiguratorInterface,您必须调用setLoggerConfigurators()方法

use EonX\EasyLogging\Factory\LoggerFactory;

$loggerConfigurators = [];

// Add your own logger configurators to $loggerConfigurators ...

$loggerFactory = new LoggerFactory();

// Set your logger configurators on the logger factory
$loggerFactory->setLoggerConfigurators($loggerConfigurators);

以下是一个使用微秒的LoggerConfiguratorInterface的简单示例

namespace App\Logger;

use EonX\EasyLogging\Config\AbstractLoggingConfig;
use EonX\EasyLogging\Configurator\LoggerConfiguratorInterface;
use Monolog\Logger;

final class UseMicrosecondsLoggerConfigurator extends AbstractLoggingConfig implements LoggerConfiguratorInterface
{
    public function configure(Logger $logger) : void
    {
        $logger->useMicrosecondTimestamps(true);
    }
}