2011-09-07 21 views
2

多的作家,我有這樣的在我的配置記錄儀:Zend_Log進行用的application.ini

resources.log.stream.writerName = "Stream" 
resources.log.stream.writerParams.stream = APPLICATION_PATH "/../logs/err.log" 
resources.log.stream.writerParams.mode = "a" 
resources.log.stream.filterName = "Priority" 
resources.log.stream.filterParams.priority = 3 

但我想使用它的唯一的錯誤日誌。對於另一個日誌想使用另一個日誌文件。出於這個原因,我添加了這些行app.ini

resources.log.stream.writerName = "Stream" 
resources.log.stream.writerParams.stream[] = APPLICATION_PATH "/../logs/debug.log" 
resources.log.stream.writerParams.stream[] = APPLICATION_PATH "/../logs/info.log" 
resources.log.stream.writerParams.mode = "a" 
resources.log.stream.filterName = "Priority" 
resources.log.stream.filterParams.priority[] = 7 
resources.log.stream.filterParams.priority[] = 5 

但是這是不工作我想用differetn文件不同的優先級。但記錄器會覆蓋第一個記錄器。怎麼樣 ?

回答

8

的application.ini的例子:

resources.log.err.writerName = "Stream" 
resources.log.err.writerParams.stream = APPLICATION_PATH "/../data/logs/ERR.log" 
;resources.log.stream.formatterParams.format = "%priority%:%message% %timestamp% %priorityName% %info% PHP_EOL" 
resources.log.err.filterName = "Priority" 
resources.log.err.filterParams.priority = 3 
resources.log.err.filterParams.operator = "==" 

resources.log.warn.writerName = "Stream" 
resources.log.warn.writerParams.stream = APPLICATION_PATH "/../data/logs/WARN.log" 
;resources.log.warn.formatterParams.format = "%priority%:%message%:%ip%:%userid% %timestamp% %priorityName% %info% PHP_EOL" 
resources.log.warn.filterName = "Priority" 
resources.log.warn.filterParams.priority = 4 
resources.log.warn.filterParams.operator = "==" 

在引導:

protected function _initLog() { 
    $options = $this->getOption('resources'); 
    $partitionConfig = $this->getOption('log'); 
    $logOptions = $options['log']; 
    $logger = Zend_Log::factory($logOptions); 
    $logger->addPriority('USERACTION', 8); 
    $logger->addPriority('DBLOG', 9); 
    Zend_Registry::set('logger', $logger); 
} 

然後在代碼:

$this->logger = Zend_Registry::get('logger'); 
$this->logger->setEventItem('ip', $_SERVER['REMOTE_ADDR']); 
$this->logger->setEventItem('userid', $this->userId); 

用這樣的方式:

$this->logger->log('Test error', Zend_Log::WARN); 

或者這樣說:

$this->logger->warn('Test error'); 

或者這樣說:

$this->logger->log('Test error', 4); 
+0

請注意,application.ini中的常量PHP_EOL必須出現在引用之外分數。否則,它將被解釋爲文字。 –

1

您可以使用過濾器來完成此操作。只要讓更高優先級的事件通過過濾器,直到您想記錄它們。

http://framework.zend.com/manual/en/zend.log.filters.html

什麼是錯在你安裝的是,你要使用同一個作家,你不應該。使用過濾器來選擇作者,並將某些日誌文件與某些作者相關聯,如示例的第二部分所示。

我覺得這樣的事情應該做的伎倆:

resources.log.stream.writerName = "myDebugWriter" 
resources.log.stream.writerParams.stream = APPLICATION_PATH "/../logs/debug.log" 
resources.log.stream.filterName = "Priority" 
resources.log.stream.filterParams.priority = Zend_Log::WARN 
resources.log.stream.writerName = "myInfoWriter" 
resources.log.stream.writerParams.stream = APPLICATION_PATH "/../logs/info.log" 
resources.log.stream.filterName = "Priority" 
resources.log.stream.filterParams.priority = Zend_Log::INFO 
+0

確定我得到writerName必須Stream或螢火蟲等,但我可以我該如何解決不同錯誤級別的不同文件的問題。在Bootstrap中,我可以做到這一點,但我想在app.ini文件中做到這一點。 – duzenz

+0

上面的代碼不起作用我試過它的問題是ZF中指定的writerName參數像Stream或Firebug。所以「MyDebugWriter」不起作用。我必須在我的項目中使用「流」,因爲它支持err日誌或調試日誌,但我無法找到任何地方我如何在app.ini中使用不同的文件 – duzenz