1

ZEND フレームワーク 2 でロガーを構成して使用する方法は? アプリケーションのブートストラップでロガーオブジェクトを作成するのは良い方法ですか?

4

3 に答える 3

2

最初に、Service Manager 構成をセットアップできます。

'factories' => array(
    'Zend\Log\Logger' => function($sm){
        $logger = new \Zend\Log\Logger;
        $writer = new \Zend\Log\Writer\Stream('./data/log/'.date('Y-m-d').'-error.log');
        $logger->addWriter($writer);

        return $logger;
    },
)

次に、コントローラーに次のようなものを追加できます

/**
 * Get the logger
 * 
 * @return  \Zend\Log\Logger
 */
protected function _getLog()
{
    if($this->_log == NULL) {
        $this->_log = $this->getServiceLocator()->get('Zend\Log\Logger');
    }

    return $this->_log;
}

/**
 * Shortcut for logging method. 
 * Swapped parameter order to save code inside controllers.
 *
 * @param  mixed $message
 * @param  int $priority
 * @param  array|Traversable $extra
 * @return Logger
 * @throws Exception\InvalidArgumentException if message can't be cast to string
 * @throws Exception\InvalidArgumentException if extra can't be iterated over
 * @throws Exception\RuntimeException if no log writer specified
 */
protected function _log($message, $priority = \Zend\Log\Logger::DEBUG, $extra = array())
{
    return $this->_getLog()->log($priority, $message, $extra);
}

コントローラーのコードを削減するために、パラメーターの順序が入れ替わっていることに注意してください。これにより、物事が少し簡単になります。

次に、コントローラーに何かを記録する場合のショートカットがあります。

public function testAction()
{
    $this->_log('Testing');
}
于 2013-05-17T15:47:19.930 に答える
0

Zend Framework 2.2 以降では、config に次の行を設定するだけです。

'log' => array(
    'Application\Log' => array(
        'writers' => array(
            array(
                'name'     => 'stream',
                'priority' => 1000,
                'options'  => array(
                    'stream' => 'data/logs/app.log',
                ),
            ),
        ),
    ),
),

アプリケーションコントローラーで使用します。

 protected $log;

 public function getLog()
 {
     if (!$this->log) {     
        $sm = $this->getServiceLocator();
        $this->log = $sm->get('Application\Log');
     }
     return $this->log;
 }

詳細 - zf2.2 リリース ノート

于 2013-05-20T12:18:02.120 に答える