我们最近开始将一个项目从 Zend Framework 1 迁移到 Zend Framework 3。使用 Zend Framework 1,我们使用 Log4PHP 库进行应用程序日志记录。使用 Log4PHP,我们能够根据日志级别(调试、信息和错误)将日志记录在不同的文件中。
Log4PHP 库与 Zend Framework 3 不兼容。因此决定使用 Zend Framework 3 中提供的 Zend Log 组件。我尝试通过查看 Internet 上可用的文档来放置基于日志级别的日志,并注意到所有日志都被写入到指定为编写器一部分的所有提到的文件。
HomeControllerFactory.php
<?php
namespace Application\Controller;
use Zend\ServiceManager\Factory\FactoryInterface;
use Interop\Container\ContainerInterface;
use Zend\Log\Logger;
use Zend\Log\Writer;
class HomeControllerFactory implements FactoryInterface
{
public function __invoke(ContainerInterface $container, $requestedName, array $options = null)
{
$serviceManager = $container->get('ServiceManager');
$logger = $container->get(Logger::class);
$infoWriter = new Writer\Stream('C:\log\info.log');
$debugWriter = new Writer\Stream('C:\log\debug.log');
$errorWriter = new Writer\Stream('C:\log\error.log');
$logger->addWriter($infoWriter,6);
$logger->addWriter($debugWriter,7);
$logger->addWriter($errorWriter,3);
return new HomeController($serviceManager, $logger);
}
}
家庭控制器.php
<?php
/**
* @link http://github.com/zendframework/ZendSkeletonApplication for the canonical source repository
* @copyright Copyright (c) 2005-2016 Zend Technologies USA Inc. (http://www.zend.com)
* @license http://framework.zend.com/license/new-bsd New BSD License
*/
namespace Application\Controller;
use Zend\Mvc\Controller\AbstractActionController;
use Zend\View\Model\ViewModel;
use \Zend\ServiceManager\ServiceManager;
use Zend\Log\Logger;
use Application\Model\UTP\UTPUtils;
class HomeController extends AbstractActionController {
private $serviceManager;
private $logger;
public function __construct(ServiceManager $serviceManager, Logger $objLogger)
{
$this->serviceManager = $serviceManager;
$this->logger = $objLogger;
}
public function indexAction() {
$config = $this->serviceManager->get('config');
$this->logger->info(__CLASS__ . ' It is an info log');
$this->logger->debug(__CLASS__ . ' It is a debug log');
$this->logger->err(__CLASS__ . ' It is an error log');
}
}
有了这个,所有三个日志都写入所有 3 个文件 error.log、info.log、debug.log 我想要实现的是,如果我们调用
$this->logger->debug(<message>)
, 日志应该写入 debug.log 文件$this->logger->info(<message>)
, 日志应写入 info.log 文件$this->logger->err(<message>)
,日志应该写入error.log文件