2011-09-07 6 views
2

j'ai un enregistreur dans ma config comme ceci:Zend_Log avec plusieurs écrivains 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 

Mais je veux l'utiliser pour que les journaux d'erreurs. Pour un autre journal, vous voulez utiliser un autre fichier journal. Pour cette raison, j'ai ajouté ces lignes à 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 

Mais ce ne fonctionne pas je veux utiliser differetn fichiers pour des priorités différentes. Mais le logger remplace le premier enregistreur. Comment ?

Répondre

8

Exemple de 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 = "==" 

En bootstrap:

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); 
} 

Puis dans les codes:

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

Utilisez cette technique:

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

Ou cette façon:

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

Ou cette façon:

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

Notez que la constante PHP_EOL dans application.ini doit apparaître en dehors de la citation des notes. Sinon, il sera interprété comme un littéral. –

1

Vous pouvez utiliser des filtres pour cela. Laissez simplement les événements de priorité supérieure passer à travers les filtres jusqu'à ce que vous vouliez les enregistrer.

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

Qu'est-ce qui ne va pas dans votre configuration est que vous essayez d'utiliser le même auteur que vous ne devriez pas. Utilisez les filtres pour choisir les auteurs et associer certains fichiers journaux à certains auteurs, comme indiqué dans la deuxième partie de l'exemple.

Je pense que quelque chose comme ça devrait faire l'affaire:

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

ok je reçois le writerName doit être rationalisées ou Firebug etc. Mais je peux comment puis-je résoudre le problème de différents fichiers pour différents niveaux d'erreur. Dans Bootstrap je peux le faire mais je veux le faire dans le fichier app.ini. – duzenz

+0

le code ci-dessus ne fonctionne pas je l'ai essayé le problème est writerName paramètres spécifiés dans ZF comme Stream ou Firebug. donc "MyDebugWriter" ne fonctionne pas. Je dois utiliser "Stream" dans mon projet car il supporte le journal d'erreur ou le journal de débogage mais je ne trouve nulle part comment je peux utiliser dans app.ini pour différents fichiers – duzenz

Questions connexes