示例#1
0
 /**
  * get Logger
  * 
  * @return OSS_Log
  */
 public function getLogger()
 {
     if (null === $this->_logger) {
         // Get Doctrine configuration options from the application.ini file
         $options = $this->getOptions();
         $logger = new OSS_Log();
         if (isset($options['enabled']) && $options['enabled']) {
             foreach ($options['writers'] as $writer => $writerOptions) {
                 switch ($writer) {
                     case 'stream':
                         if (isset($writerOptions['mode']) && ($writerOptions['mode'] = 'single')) {
                             $log_path = $writerOptions['path'];
                             $log_file = $log_path . DIRECTORY_SEPARATOR . (isset($writerOptions['logname']) ? $writerOptions['logname'] : 'log.log');
                         } else {
                             $log_path = $writerOptions['path'] . DIRECTORY_SEPARATOR . date('Y') . DIRECTORY_SEPARATOR . date('m');
                             $log_file = $log_path . DIRECTORY_SEPARATOR . date('Ymd') . '.log';
                         }
                         if (file_exists($log_path) == false) {
                             mkdir($log_path, 0755, true);
                             @chmod($log_path, 0755);
                             @chown($log_path, $writerOptions['owner']);
                             @chgrp($log_path, $writerOptions['group']);
                         }
                         if (file_exists($log_file) == false) {
                             touch($log_file);
                             @chmod($log_file, 0777);
                             @chown($log_file, $writerOptions['owner']);
                             @chgrp($log_file, $writerOptions['group']);
                         }
                         $streamWriter = new Zend_Log_Writer_Stream($log_file);
                         $streamWriter->setFormatter(new Zend_Log_Formatter_Simple('%timestamp% %priorityName% (%priority%) ' . (isset($_SERVER['REMOTE_ADDR']) == true ? "[{$_SERVER['REMOTE_ADDR']}]" : "") . ': %message%' . PHP_EOL));
                         $logger->addWriter($streamWriter);
                         if (isset($writerOptions['level'])) {
                             $logger->addFilter((int) $writerOptions['level']);
                         }
                         break;
                     case 'email':
                         $mail = new Zend_Mail();
                         $mail->setFrom($writerOptions['from'])->addTo($writerOptions['to']);
                         $mailWriter = new Zend_Log_Writer_Mail($mail);
                         // Set subject text for use; summary of number of errors is appended to the
                         // subject line before sending the message.
                         $mailWriter->setSubjectPrependText("[{$writerOptions['prefix']}]");
                         // Only email entries with level requested and higher.
                         $mailWriter->addFilter((int) $writerOptions['level']);
                         $logger->addWriter($mailWriter);
                         break;
                     case 'firebug':
                         if ($writerOptions['enabled']) {
                             $firebugWriter = new Zend_Log_Writer_Firebug();
                             $firebugWriter->addFilter((int) $writerOptions['level']);
                             $logger->addWriter($firebugWriter);
                         }
                         break;
                     default:
                         try {
                             $logger->log("Unknown log writer: {$writer}", Zend_Log::WARN);
                         } catch (Zend_Log_Exception $e) {
                             die("Unknown log writer [{$writer}] during application bootstrap");
                         }
                         break;
                 }
             }
         } else {
             $logger->addWriter(new Zend_Log_Writer_Null());
         }
         try {
             $logger->debug('Logger instantiated', Zend_Log::INFO);
         } catch (Zend_Log_Exception $e) {
             die("Unknown log writer [{$writer}] during application bootstrap");
         }
         $this->_logger = $logger;
     }
     return $this->_logger;
 }