2013-08-19 45 views
0

Yii中,當要登錄,您只需撥打:登錄Zend的最簡單方法是什麼?

YII::log("bla"); 

在Zend的,我要創建一個功能:

private function log($message, $priority = Zend_Log::INFO) 
{ 
    $logger = Zend_Registry::get("log"); 
    if(is_object($message) || is_array($message)) 
     $logger->log(print_r($message,true), $priority); 
    else 
     $logger->log($message, $priority); 
} 

什麼是可以得到全局功能,因此最簡單的方法我也可以像YII一樣輕鬆地記錄內容。有沒有可能是一個內置的方式,由此我可以做這樣的事情:

ZEND::log("Bla"); 

要不我怎麼會創造這樣的功能,我會在哪裏把它放在我的代碼?

回答

2

這取決於你的目的是什麼日誌記錄。我看到三個選項:

  1. 標準記錄。如果你想記錄一切,那麼你可以檢查誰做了哪些操作,你應該創建一個插件並讓它登錄,或者創建數據庫適配器日誌。

    記錄我做的一個例子:

    class App_Plugin_Logger extends Zend_Controller_Plugin_Abstract { 
    
    protected $fileLoc; 
    public function __construct($file = null) { 
        if($file ===null) 
         $file = APPLICATION_PATH.'/../log/log_'.date('Y-m-d').'.txt'; 
        $this->fileLoc = $file; 
    } 
    
    public function preDispatch(Zend_Controller_Request_Abstract $request) { 
        $id = (Zend_Auth::getInstance()->hasIdentity() ? Zend_Auth::getInstance()->getIdentity()->getId() : 0); 
    
        $fp = fopen($this->fileLoc,"a"); 
        $message = date('Y-m-d H:i:s').' '.$request->getServer('REMOTE_ADDR').' USER:'.$id.' '.json_encode($request->getParams()).PHP_EOL; 
         //logs all the input data (post/get), controller, action and ip-addres of client 
        if(fwrite($fp,$message)===false){ 
         error_log('MagStream, Logging failed:'.$message); 
        } 
        fclose($fp); 
    } 
    } 
    
  2. 如果你只是想知道調試一個變量,你既可以die(var_dump($variable));或使用Xdebug擴展(非常有用)

  3. 如果你想登錄在特定的地方,你可以做一個類你自己至極的打開文件,並在末尾添加行或使用Zend_Log進行庫:http://framework.zend.com/manual/1.12/en/zend.log.overview.html

你可以給Zend_Log添加一個靜態函數:

public static function l($mes){ 
    $logger = new Zend_Log(); 
    $writer = new Zend_Log_Writer_Stream('php://output'); 
    $logger->addWriter($writer); 
    $logger->log($mes, Zend_Log::DEBUG); 
} 
相關問題