Search code examples
zend-frameworkloggingzend-log

Zend_Log with multiple writers in application.ini


i have a logger in my config like this:

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

But i want to use it for only error logs. For another logs wanna use another log file. For that reason i added these lines to 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

But this is not working i wanna use differetn files for different priorities. But logger overrides the first logger. How ?


Solution

  • Example of 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 = "=="
    

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

    Then in codes:

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

    Use this way:

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

    Or this way:

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

    Or this way:

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