michaelmoussa / zend-psr-log
符合PSR3规范,与旧版本兼容的,可直接替换Zend\Log\Logger。
Requires
- php: ^7.0
- psr/log: ~1.0
- zendframework/zend-log: ~2.1
- zendframework/zend-modulemanager: ~2.1
- zendframework/zend-mvc: ~2.1
Requires (Dev)
- mockery/mockery: ~0.9
- phpdocumentor/phpdocumentor: ~2.7
- phpunit/phpunit: ~4.3
- squizlabs/php_codesniffer: ~1.5
- zendframework/zendframework: ~2.1
This package is not auto-updated.
Last update: 2023-12-06 09:54:01 UTC
README
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(...)
."
- 请不要这样做。 :) 您应该使用
ServiceManager
。 - 将
new \Zend\Log\Logger
替换为new \ZendPsrLog\Logger
。
使用方法
作为 Zend\Log\LoggerInterface
ZendPsrLog\Logger
是 Zend\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\Logger
的 Psr\Log\LoggerInterface
$foo = new Foo($logger->getPsrLogger());