2017-09-23 99 views
2

我想將包含登錄用戶的用戶ID的字段添加到zend db logger中。將用戶ID字段添加到zend數據庫記錄器

這裏是我當前的代碼:

$mapping = array(
     'timestamp' => 'created', 
     'priorityName' => 'type', 
     'message' => 'message'     
);  
$dbAdapter = Pluto::database()->getMasterAdapter(); 
$writer = new \Zend\Log\Writer\Db($dbAdapter,'logs',$mapping); 
$this->logger->addWriter($writer); 

我的用戶ID列將userid。如果用戶沒有登錄,那麼它應該插入0.

不太確定在這裏做什麼。

UPDATE

這裏是我當前的處理器:

namespace Pluto\Log; 

use Zend\Log\Processor\ProcessorInterface; 

class UserAwareProcessor implements ProcessorInterface 
{ 
    /** 
    * @param array $event event data 
    * @return array event data 
    */ 
    public function process(array $event) 
    { 
     if (! isset($event['extra'])) { 
      $event['extra'] = []; 
     } 

     $event['extra']['userid'] = 5; 

     return $event; 
    } 
} 

回答

0

您可以使用自定義log processor只是寫之前輕鬆附加/添加任何數據到你的日誌。由於處理器從記錄器之前被傳遞給筆者的日誌事件叫,我會創造MyApp\Log\UserAwareProcessor具有以下簽名和身體:

<?php 
namespace MyApp\Log; 

use Zend\Log\Processor\ProcessorInterface 

class UserAwareProcessor implements ProcessorInterface 
{ 
    /** 
    * @param array $event event data 
    * @return array event data 
    */ 
    public function process(array $event) 
    { 
     if (! isset($event['extra'])) { 
      $event['extra'] = []; 
     } 

     $event['extra']['userId'] = $this->getUserId(); 

     return $event; 
    } 

    /** 
    * @return int 
    */ 
    private function getUserId() 
    { 
     // Read the id from session or any other source and return it 
    } 
} 

最後,一個作家設置爲您記錄後,您會還需要設置處理器類似:

$this->logger->addWriter($writer); 
$processor = new MyApp\Log\UserAwareProcessor(); 
$this->logger->addProcessor($processor); 

您可能還需要結帳log formatters

希望它有幫助。

+0

似乎沒有更新數據庫列用戶標識。檢查我的更新代碼 – jkushner

相關問題