Zend_Log с несколькими авторами в application.ini - PullRequest
2 голосов
/ 07 сентября 2011

У меня есть логгер в моей конфигурации, как это:

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

Но это не работает, я хочу использовать разные файлы для разных приоритетов. Но регистратор переопределяет первый регистратор. Как?

Ответы [ 2 ]

8 голосов
/ 14 декабря 2012

Пример 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);
1 голос
/ 07 сентября 2011

Вы можете использовать фильтры для достижения этой цели.Просто позвольте событиям с более высоким приоритетом проходить через фильтры до тех пор, пока вы не захотите их зарегистрировать.

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
...