michaelmoussa/zend-psr-log

此包已被废弃,不再维护。没有建议的替代包。

符合PSR3规范,与旧版本兼容的,可直接替换Zend\Log\Logger。

2.0.0 2017-03-02 03:35 UTC

This package is not auto-updated.

Last update: 2023-12-06 09:54:01 UTC


README

Build Status Scrutinizer Code Quality Code Climate Code Coverage Latest Stable Version Latest Unstable Version License

zend-psr-log

概述

许多PHP库接受Psr\Log\LoggerInterface进行消息记录。不幸的是,使用Zend Framework 2的应用程序无法提供现有的Zend\Log\Logger记录器,因为它们不符合PSR-3

实际上,这两个接口不兼容,因为它们声明了一些具有不同签名的公共方法。例如:Zend警报Psr警报

这个库作为Zend\Log\Logger实例的后向兼容替代品,提供了一个符合Psr\Log接口到底层Zend\Log\Logger实例。结果是,您可以提供任何记录器,具体取决于特定上下文所需的接口,同时所有消息都通过Zend\Log\Logger传输,并从中受益于其健壮性。

安装

唯一支持的安装方法是Composer

composer require "michaelmoussa/zend-psr-log"

配置

首先,您必须将ZendPsrLog模块添加到您的application.config.php模块列表中,就像任何ZF2应用程序一样。

return [
    'modules' => [
        ...,

        'ZendPsrLog',

        ...
    ],
    ...
];

进一步的配置取决于您目前是如何获取Zend\Log\Logger实例的。

"我在配置中定义了一个log条目,以Zend\Log\Logger作为键,然后让Zend\Log\LoggerAbstractServiceFactory来完成工作。"

然后您就完成了!ZendPsrLog添加了自己的工厂来创建Zend\Log\Logger实例,这将在抽象工厂之前调用。

"我在配置中定义了一个具有不同键的log条目,然后让Zend\Log\LoggerAbstractServiceFactory来完成工作。"

对于您使用的每个键,您需要在服务管理器配置中添加一个'My\Key\Here' => new \ZendPsrLog\LoggerFactory('My\Key\Here')条目。

"我在配置中定义了一个没有键的日志键,然后在服务管理器配置中定义了自己的 'Zend\Log\Logger' => '...' 工厂定义"

您需要将您的 'Zend\Log\Logger' => '...' 条目替换为 'Zend\Log\Logger' => new \ZendPsrLog\LoggerFactory(null),因为您的定义将覆盖 ZendPsrLog\LoggerFactory 所做的定义。

如果您的自定义工厂执行某些特殊逻辑,您将需要在自己的 ZendPsrLog\LoggerFactory 上进行扩展,以确保其持久性。

"我使用 new \Zend\Log\Logger(...)."

  1. 请不要这样做。 :) 您应该使用 ServiceManager
  2. new \Zend\Log\Logger 替换为 new \ZendPsrLog\Logger

使用方法

作为 Zend\Log\LoggerInterface

ZendPsrLog\LoggerZend\Log\Logger 的扩展,因此任何当前正在使用 Zend\Log\Logger 的应用程序中的类都可以使用 ZendPsrLog\Logger 而无需任何额外的配置。

作为 Psr\Log\LoggerInterface

假设您有一个需要 Psr\Log\LoggerInterface 实例的类

use Psr\Log\LoggerInterface;

class Foo
{
    public function __construct(LoggerInterface $logger) { ... }
}

然后您获取一个 ZendPsrLog\Logger 实例

/** @var \ZendPsrLog\Logger $logger */
$logger = $serviceManager->get('Zend\Log\Logger');

只需使用 ->getPsrLogger() 方法来获取您现有的 Zend\Log\LoggerPsr\Log\LoggerInterface

$foo = new Foo($logger->getPsrLogger());