我在我的配置中有一个日志记录器:
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
但这是不工作,我想使用不同的文件为不同的优先级。但是logger会覆盖第一个logger。如何?
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);
您可以使用过滤器来完成此操作。只要让高优先级的事件通过过滤器,直到你想记录它们。
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