Search code examples
phpzend-frameworkfirephpzend-log

FirePHP doesn't always write log messages


I set my loggers up in my Bootstrap.php like so:

 $logger = new Zend_Log();
    if($environment->debug == '1')
    {
        $stream = @fopen('/var/www/html/rta/rta.log','a',false);
        if(!$stream){ throw new Exception('Failed to open log stream'); }
        $writer = new Zend_Log_Writer_Stream($stream);
        $logger->addWriter($writer);
        $logger->addWriter(new Zend_Log_Writer_Firebug());
    }
    else
    {
        // Do something else
    }
    Zend_Registry::set('logger',$logger);

I have the following code that I set up to fail:

$data = array(
            'config_id'      => $config->getConfigId(),
            'pass_column'    => $config->getPassColumn(),
            'filename'       => $config->getFilename(),
            'date_format'    => $config->getDateFormat(),
            'mapping_config' => $config->getMappingConfig(),
            'config_name'    => $config->getConfigName(),
            'client_id'      => $config->getClientId(),
            'description'    => $config->getDescription(),
        );

        $where = $this->getDbTable()->getAdapter()->quoteInto('config_id = ?',$config->getConfigId());
        $where = null;
        try
        {
            $this->getDbTable()->update($data,$where);
        }catch(Exception $e)
        {
            Zend_Registry::get('logger')->err('Could not update configuration.');
            Zend_Registry::get('logger')->err($e);
            return false;
        }
        return true;

I set two log writers: Stream and FirePHP. The stream log writer successfully caught and wrote the exception but FirePHP didn't do anything. If I put other log messages other places in my code, like indexAction it shows those just fine in both. Am I missing something?

EDIT The failure code is in my database mapper, not a controller. Could it be that it doesn't have access to the HTTP headers?


Solution

  • The following example below shows how to make FirePHP get the header info it needs without using the FrontController.

        // create the logger and log writer
        $writer = new Zend_Log_Writer_Firebug();
        $logger = new Zend_Log($writer);
    
        // get the wildfire channel
        $channel = Zend_Wildfire_Channel_HttpHeaders::getInstance();
    
        // create and set the HTTP response
        $response = new Zend_Controller_Response_Http();
        $channel->setResponse($response);
    
        // create and set the HTTP request
        $channel->setRequest(new Zend_Controller_Request_Http());
    
        // record log messages
        $logger->info('info message');
        $logger->warn('warning message');
        $logger->err('error message');
    
        // insert the wildfire headers into the HTTP response
        $channel->flush();
    
        // send the HTTP response headers
        $response->sendHeaders();
    ?>