vcomedia / vco-zf-logger
Zend Framework 2 日志模块。
dev-master
2016-10-01 05:25 UTC
Requires
- php: >=5.3.3
- zendframework/zendframework: >=2.2
This package is not auto-updated.
Last update: 2024-09-28 18:31:45 UTC
README
对Zend/Logger/Log的包装,允许用户跟踪异常、添加默认的"extra"属性、自动注入邮件传输的邮件写入器,以及从doctrine odm自动注入mongoClient的mongo写入器。灵感来自eddiejaoude/zf2-logger。
安装
Composer
- 安装Composer
- 使用Composer将模块安装到应用程序的vendor目录中。将以下行添加到您的
composer.json
文件中。
{ "require": { "vcomedia/vco-zf-logger": "dev-master" } }
- 执行
composer update
- 在您的ZF2
application.config.php
文件中启用模块。
return array( 'modules' => array( 'VcoZfLogger' ) );
- 将
vco-zf-logger/config/module.vco-zf-logger.local.php.dist
文件复制并粘贴到您的config/autoload
文件夹中,并使用您的配置设置进行自定义。确保从您的文件中删除.dist
。您的module.vco-zf-logger.local.php
可能如下所示
<?php return array( 'VcoZfLogger' => array( 'exceptionhandler' => true, 'errorhandler' => true, // note: this disables native error handler 'fatal_error_shutdownfunction' => true, 'writers' => array( 'standardstreamwriter' => array( 'name' => 'stream', 'options' => array( 'stream' => 'data/log/application.log', 'filters' => array( 'priority' => array( 'name' => 'priority', 'options' => array( 'priority' => \Zend\Log\Logger::WARN ) ), 'suppress' => array( 'name' => 'suppress', 'options' => array( 'suppress' => false ) ) ), 'formatter' => array( 'name' => 'simple', 'options' => array( 'dateTimeFormat' => 'Y-m-d H:i:s' ) ) ) ), // setup instructions - https://craig.is/writing/chrome-logger // chrome plugin - https://chrome.google.com/webstore/detail/chromephp/noaneddfkdjfnfdakjjmocngnfkfehhd 'chromphpwriter' => array( 'name' => 'chromephp', 'options' => array( 'filters' => array( 'priority' => array( 'name' => 'priority', 'options' => array( 'priority' => \Zend\Log\Logger::DEBUG ) ), 'suppress' => array( 'name' => 'suppress', 'options' => array( 'suppress' => false ) ) ) ) ), 'emailwriter' => array( 'name' => 'mail', 'options' => array( 'mail' => array( 'from' => 'from@domain.com', 'to' => 'to@domain.com' ), 'subject_prepend_text' => 'Application Exception', 'transport' => 'mail.transport', //service name pointing to mail transport 'filters' => array( 'priority' => array( 'name' => 'priority', 'options' => array( 'priority' => \Zend\Log\Logger::ERR ) ), 'suppress' => array( 'name' => 'suppress', 'options' => array( 'suppress' => false ) ) ), 'formatter' => array( 'name' => 'simple', 'options' => array( 'dateTimeFormat' => 'Y-m-d H:i:s' ) ) ) ), 'mongowriter' => array( 'name' => 'Zend\Log\Writer\MongoDB', 'options' => array( 'mongo' => 'doctrine.documentmanager.odm_default', //service name pointing to doctrine document manager or standard array to configure mongoClient 'database' => null, //if empty and using service name in above option, default doctrine odm db will be injected 'collection' => 'application.log', 'save_options' => array( 'w' => 0 //fire and forget ) ), 'filters' => array( 'priority' => array( 'name' => 'priority', 'options' => array( 'priority' => \Zend\Log\Logger::DEBUG ) ), 'suppress' => array( 'name' => 'suppress', 'options' => array( 'suppress' => true ) ) ) ) ) ) );
注意:由顶级'VcoZfLogger'键返回的配置数组直接传递给Log类构造函数,除了邮件传输和mongo凭证注入,这两者都是可选的。
- 要访问您的日志记录器并记录一条消息,您可以这样做
$logger = $this->getServiceLocator()->get('VcoZfLogger'); $logger->log(\Zend\Log\Logger::INFO, 'Some message to log.');
- 要向所有记录的消息添加额外的'extra'参数,请将以下内容添加到Module.php中的onBootstrap方法
public function onBootstrap (MvcEvent $e) { $eventManager = $e->getApplication()->getEventManager(); $moduleRouteListener = new ModuleRouteListener(); $moduleRouteListener->attach($eventManager); $sm = $e->getApplication()->getServiceManager(); $logger = $sm->get('VcoZfLogger'); $logger->addDefaultExtra(array('foo' => 'bar')); }
- 注意:以下'extra'参数默认添加到所有记录的消息中
$defaultExtra = array( 'sessionId' => session_id(), 'host' => !empty($_SERVER['HTTP_HOST']) ? $_SERVER['HTTP_HOST'] : 'CLI', 'ip' => !empty($_SERVER['REMOTE_ADDR']) ? $_SERVER['REMOTE_ADDR'] : 'unavailable' );
-
您可以使用setDefaultExtra方法删除默认的'extra'选项或立即设置自己的选项
public function onBootstrap (MvcEvent $e) { $eventManager = $e->getApplication()->getEventManager(); $moduleRouteListener = new ModuleRouteListener(); $moduleRouteListener->attach($eventManager); $sm = $e->getApplication()->getServiceManager(); $logger = $sm->get('VcoZfLogger'); $logger->setDefaultExtra(array()); }
-
与其使用
VcoZfLogger
作为日志服务名称,不如使用别名进行解耦
例如。
//...
'aliases' => array(
'Logger' => 'VcoZfLogger'
),
//...
然后您的代码使用如下...
//... $serviceLocator->get('Logger')->emerg('Emergency message'); //...
- 您可以通过实现LoggerAwareInterface轻松地将日志记录器注入到任何服务中
例如。
//...
/**
* Set logger instance
*
* @param LoggerInterface
* @return void
*/
public function setLogger(LoggerInterface $logger);
//...
许可证
MIT许可证 (MIT)
版权所有 (c) 2015 Vahag Dudukgian
特此授予任何获得本软件及其相关文档副本(以下简称“软件”)的人免费使用权,不受任何限制地处理软件,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或销售软件的副本,并允许软件的提供者这样做,前提是遵守以下条件
上述版权声明和本许可声明应包含在软件的所有副本或主要部分中。
软件按“原样”提供,不提供任何明示或暗示的保证,包括但不限于适销性、特定用途适用性和非侵权性保证。在任何情况下,作者或版权所有者均不对任何索赔、损害或其他责任负责,无论这些责任是基于合同、侵权或其他原因,是否与软件或其使用或其他方式有关。