vcomedia / vco-zf-logger

Zend Framework 2 日志模块。

dev-master 2016-10-01 05:25 UTC

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

特此授予任何获得本软件及其相关文档副本(以下简称“软件”)的人免费使用权,不受任何限制地处理软件,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或销售软件的副本,并允许软件的提供者这样做,前提是遵守以下条件

上述版权声明和本许可声明应包含在软件的所有副本或主要部分中。

软件按“原样”提供,不提供任何明示或暗示的保证,包括但不限于适销性、特定用途适用性和非侵权性保证。在任何情况下,作者或版权所有者均不对任何索赔、损害或其他责任负责,无论这些责任是基于合同、侵权或其他原因,是否与软件或其使用或其他方式有关。