如何解决Zend Framework 3 中基于日志级别编写日志
我们最近开始将一个项目从 Zend Framework 1 迁移到 Zend Framework 3。在 Zend Framework 1 中,我们使用 Log4PHP 库进行应用程序日志记录。使用 Log4PHP,我们能够根据日志级别(调试、信息和错误)将日志记录在不同的文件中。
Log4PHP 库与 Zend Framework 3 不兼容。因此决定使用 Zend Framework 3 中可用的 Zend Log 组件。我试图通过查看互联网上可用的文档来根据日志级别放置日志,并注意到所有日志正在写入指定为 writer 一部分的所有提到的文件。
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);
}
}
HomeController.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文件
解决方法
也许你可以用 Monolog 库代替 Zend Log? 然后你可以写:
use Monolog\Logger;
use Monolog\Handler\StreamHandler;
// create a log channel
$log = new Logger('name');
$log->pushHandler(new StreamHandler('C:\log\info.log',Logger::INFO));
$log->pushHandler(new StreamHandler('C:\log\debug.log',Logger::DEBUG));
$log->pushHandler(new StreamHandler('C:\log\error.log',Logger::ERROR));
// add records to the log
$log->warning('Foo');
$log->error('Bar');
并且您的代码将与 PSR-3 标准兼容
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。