• Main Page
  • Related Pages
  • Namespaces
  • Data Structures
  • Files
  • File List

E:/E/GEAMP/www/openbiz/openbiz/bin/service/logService.php

00001 <?php
00017 require_once 'Zend/Log.php';
00018 require_once 'Zend/Log/Writer/Stream.php';
00019 
00028 class logService extends MetaObject
00029 {
00046     private $_level;
00047 
00053     private $_format;
00054     
00063     private $_org;
00069     private $_formatter;
00075     private $_extension = '.csv';
00076 
00077     private $_daystolive;
00084     public function __construct(&$xmlArr)
00085     {
00086         $this->readMetadata($xmlArr);
00087         //Check that logging is enabled
00088         if (is_int($this->_level) == FALSE)
00089             return;
00090         $this->setFormatter();
00091         $this->setExtension();
00092     }
00093 
00100     protected function readMetadata(&$xmlArr)
00101     {
00102         parent::readMetaData($xmlArr);
00103         $level = strtoupper($xmlArr["PLUGINSERVICE"]["LOG_CONFIG"]["ATTRIBUTES"]["LEVEL"]);
00104         $this->_level = (int) $level;
00105         $this->_format = strtoupper($xmlArr["PLUGINSERVICE"]["LOG_CONFIG"]["ATTRIBUTES"]["FORMAT"]);
00106         $this->_org = strtoupper($xmlArr["PLUGINSERVICE"]["LOG_CONFIG"]["ATTRIBUTES"]["ORG"]);
00107         $this->_daystolive = $xmlArr["PLUGINSERVICE"]["LOG_CONFIG"]["ATTRIBUTES"]["DAYSTOLIVE"]?strtoupper($xmlArr["PLUGINSERVICE"]["LOG_CONFIG"]["ATTRIBUTES"]["DAYSTOLIVE"]):'0';
00108     }
00109 
00119     public function log($priority, $package, $message)
00120     {
00121         if (DEBUG == 0 && $priority == LOG_DEBUG)
00122               return true;
00123        //Adapt PHP LOG priority
00124         switch ($priority)
00125         {
00126             case LOG_EMERG : //    system is unusable
00127             case LOG_ALERT :       // action must be taken immediately
00128             case LOG_CRIT : // critical conditions
00129                 $level = 2;
00130                 break;
00131             case LOG_ERR :  // error conditions
00132                 $level = 3;
00133                 break;
00134             case LOG_WARNING : // warning conditions
00135                 $level = 4;
00136                 break;
00137             case LOG_NOTICE : //   normal, but significant, condition
00138             case LOG_INFO : // informational message
00139             case LOG_DEBUG :       // debug-level message
00140                 $level = 7;
00141                 break;
00142         }
00143         //echo "log levels: ".LOG_EMERG.", ".LOG_ALERT.", ".LOG_CRIT.", ".LOG_ERR.", ".LOG_WARNING.", ".LOG_NOTICE.", ".LOG_INFO.", ".LOG_DEBUG."<br>";
00144 
00145         if ($this->_level == FALSE)
00146             return true;
00147         //Get the file path
00148         $this->_level = $level;
00149         $path = $this->_getPath($file_name);
00150         if(!is_file($path))
00151         {
00152               @touch($path);
00153               @chmod($path,0777);
00154         }
00155         if (!is_writable($path))
00156             return false;        
00157         $this->prepFile($path);
00158         //Create the log writer object
00159         $writer = new Zend_Log_Writer_Stream($path);
00160         $writer->setFormatter($this->_formatter);
00161         //Instantiate logging object
00162         $logger = new Zend_Log($writer);
00163         //Filter log entries to those allowed by configuration
00164         $filter = new Zend_Log_Filter_Priority($this->_level);
00165         $logger->addFilter($filter);
00166 
00167         $logger->setEventItem('back_trace', 'n/a');
00168         $logger->setEventItem('package', $package);
00169         $logger->setEventItem('date', date("m/d/Y"));
00170         $logger->setEventItem('time', date("H:i:s"));
00171 
00172         //Write Log Entry
00173         $logger->log($message, $level);
00174         $this->closeFile($path);
00175         return TRUE;
00176     }
00177 
00189     public function logError($level = 7, $package, $message, $fileName = NULL, $backTrace = '')
00190     {
00191         //Adapt PHP Errors
00192         switch ($level)
00193         {
00194             case 8:          // E_NOTICE
00195             case 1024:       // E_USER_NOTICE
00196                 $level = 4;
00197                 break;
00198 
00199             case 2048:       //E_STRICT
00200             case 8192:       //E_DEPRICIATED
00201             case 16384:      //E_DEPRICIATED
00202                 $level = 5;
00203                 break;
00204 
00205             case 2:          //E_WARNING
00206             case 512:        //E_USER_WARNING
00207                 $level = 3;
00208                 break;
00209 
00210             case 256:
00211                 $level = 2;
00212                 break;
00213             
00214             default:
00215                 $level = 2;
00216         }
00217 
00218         if ($this->_level == FALSE)
00219             return true;
00220         //Get the file path
00221         $this->_level = $level;
00222         $path = $this->_getPath($fileName);
00223         if (!is_writable($path))
00224             return false;
00225         $this->prepFile($path);
00226 
00227         //Create the log writer object
00228         $writer = new Zend_Log_Writer_Stream($path);
00229         $writer->setFormatter($this->_formatter);
00230 
00231         //Instantiate logging object
00232         $logger = new Zend_Log($writer);
00233 
00234         //Filter log entries to those allowed by configuration
00235         $filter = new Zend_Log_Filter_Priority($this->_level);
00236         $logger->addFilter($filter);
00237         //Set additional information about the class and function that called the log
00238 
00239 
00240         // Add custom elements to default log package
00241         $logger->setEventItem('back_trace', $backTrace);
00242         $logger->setEventItem('package', $package);
00243         $logger->setEventItem('date', date("m/d/Y"));
00244         $logger->setEventItem('time', date("H:i:s"));
00245         //Write Log Entry
00246         $logger->log($message, $level);
00247         $this->closeFile($path);
00248         return TRUE;
00249     }
00250 
00256     public function setFormatter()
00257     {
00258         switch ($this->_format)
00259         {
00260             case 'HTML':
00261             //HTML Format
00262                 $this->_formatter = new Zend_Log_Formatter_Simple('<tr><td>%date%</td> <td>%time%</td> <td>%priorityName%</td> <td>%package%</td> <td>%message%</td> <td>%back_trace%</td> </tr>' . PHP_EOL);
00263                 break;
00264             case 'XML':
00265             //XML Format
00266                 require_once 'Zend/Log/Formatter/Xml.php';
00267                 $this->_formatter = new Zend_Log_Formatter_Xml();
00268                 break;
00269             case 'CSV':
00270             default:
00271             //CSV Format
00272                 $this->_formatter = new Zend_Log_Formatter_Simple("'%date%','%time%','%priorityName%','%package%','%message%','%back_trace%'" . PHP_EOL);
00273                 break;
00274         }
00275     }
00281     public function setExtension()
00282     {
00283         switch ($this->_format)
00284         {
00285             case 'HTML':
00286                 $this->_extension = '.html';
00287                 break;
00288             case 'XML':
00289                 $this->_extension = '.xml';
00290                 break;
00291             case 'CSV':
00292             default:
00293                 $this->_extension = '.log';
00294                 break;
00295         }
00296     }
00302     public function prepFile($path)
00303     {
00304         //Check for existing file and HTML format
00305         if (file_exists($path) and $this->_format == 'HTML')
00306         {
00307             $file = file($path);
00308             array_pop($file);
00309             file_put_contents($path, $file);
00310         } elseif ($this->_format == 'HTML')
00311         {
00312             $html = '<html><head></head><body><table border="1">' . PHP_EOL;
00313             $file = fopen($path, 'a');
00314             fwrite($file, $html);
00315             fclose($file);
00316         } elseif (file_exists($path) and $this->_format == 'XML')
00317         {
00318             $file = file($path);
00319             array_pop($file);
00320             file_put_contents($path, $file);
00321         } elseif ($this->_format == 'XML')
00322         {
00323             $xml = '<?xml version="1.0" standalone="no"?><log>' . PHP_EOL;
00324             $file = fopen($path, 'a');
00325             fwrite($file, $xml);
00326             fclose($file);
00327         }
00328     }
00329 
00335     public function closeFile($path)
00336     {
00337         //Close up the file if needed
00338         switch ($this->_format)
00339         {
00340             case 'HTML':
00341                 $html = "</table></body></html>";
00342                 $file = fopen($path, 'a');
00343                 fwrite($file, $html);
00344                 fclose($file);
00345                 break;
00346             case 'XML':
00347                 $xml = "</log>";
00348                 $file = fopen($path, 'a');
00349                 fwrite($file, $xml);
00350                 fclose($file);
00351                 break;
00352             default:
00353                 break;
00354         }
00355     }
00356 
00364     private function _getPath($fileName = null)
00365     {
00366         $level = $this->_level;
00367         if ($fileName)
00368             return LOG_PATH . '/' . $fileName . $this->_extension;
00369         switch ($this->_org)
00370         {
00371             case 'DATE':
00372                 return LOG_PATH . '/' . date("Y_m_d") . $this->_extension;
00373                 break;
00374             case 'LEVEL':
00375                 $level = $this->_level2filename($level);                
00376                 return LOG_PATH . '/' . $level . $this->_extension;
00377                 break;
00378             case 'LEVEL-DATE':
00379                 $level = $this->_level2filename($level);
00380                 //delete old log files                
00381                 if($this->_daystolive>0){
00382                        foreach (glob(LOG_PATH . '/' . $level .'-*' .  $this->_extension) as $filename) {
00383                                        $mtime = filemtime($filename);
00384                                        if((time() - $mtime) >= $this->_daystolive*86400 ){
00385                                           @unlink($filename);
00386                                        }
00387                                    }
00388                 }
00389                 return LOG_PATH . '/' . $level .'-'. date("Y_m_d") .  $this->_extension;
00390                 break;
00391             case 'PROFILE':
00392                 $profile = BizSystem::getUserProfile('USERID');
00393                 if (! $profile)
00394                     $profile = 'Guest';
00395                 return LOG_PATH . '/' . $profile . $this->_extension;
00396                 break;
00397             default:
00398                 ;
00399                 break;
00400         }
00401     }
00402     
00403     private function _level2filename($level)
00404     {
00405                             switch ($this->_level)
00406                 {
00407                     case 0:
00408                         $level = 'EMERG';
00409                         break;
00410                     case 1:
00411                         $level = 'ALERT';
00412                         break;
00413                     case 2:
00414                         $level = 'CRIT';
00415                         break;
00416                     case 3:
00417                         $level = 'ERR';
00418                         break;
00419                     case 4:
00420                         $level = 'WARN';
00421                         break;
00422                     case 5:
00423                         $level = 'NOTICE';
00424                         break;
00425                     case 6:
00426                         $level = 'INFO';
00427                         break;
00428                     case 7:
00429                         $level = 'DEBUG';
00430                         break;
00431                     default:
00432                         ;
00433                         break;
00434                 }    
00435                 return $level;
00436     }
00437 }

Generated on Thu Apr 19 2012 17:09:13 for openbiz by  doxygen 1.7.2