205 Zeilen
		
	
	
		
			Kein EOL
		
	
	
		
			5,4 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			205 Zeilen
		
	
	
		
			Kein EOL
		
	
	
		
			5,4 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| /**
 | |
|  * This file is part of MySQLDumper released under the GNU/GPL 2 license
 | |
|  * http://www.mysqldumper.net
 | |
|  *
 | |
|  * @package         MySQLDumper
 | |
|  * @subpackage      Log
 | |
|  * @version         SVN: $Rev$
 | |
|  * @author          $Author$
 | |
|  */
 | |
| /**
 | |
|  * Log Class
 | |
|  *
 | |
|  * @package         MySQLDumper
 | |
|  * @subpackage      Log
 | |
|  */
 | |
| class Msd_Log
 | |
| {
 | |
|     // Define constants
 | |
|     const PHP = 'PHP-Log';
 | |
|     const PERL = 'PERL-Log';
 | |
|     const PERL_COMPLETE = 'PERL-Complete-Log';
 | |
|     const ERROR = 'Error-Log';
 | |
| 
 | |
|     // Define static Instance
 | |
|     private static $_instance = NULL;
 | |
|     private $_paths = NULL;
 | |
| 
 | |
|     /**
 | |
|      * Init file handles
 | |
|      *
 | |
|      * @return void
 | |
|      */
 | |
|     public function __construct()
 | |
|     {
 | |
|         // define instance handler
 | |
|         $this->handle = array();
 | |
|         $this->handle[self::PHP] = false;
 | |
|         $this->handle[self::PERL] = false;
 | |
|         $this->handle[self::PERL_COMPLETE] = false;
 | |
|         $this->handle[self::ERROR] = false;
 | |
| 
 | |
|         // get config
 | |
|         $config = Msd_Configuration::getInstance();
 | |
|         $this->_paths = (object)$config->get('paths');
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Close all open file handles on destruct
 | |
|      *
 | |
|      * @return void
 | |
|      */
 | |
|     public function __destruct()
 | |
|     {
 | |
|         if ($this->handle[self::PHP]) {
 | |
|             $this->_close(self::PHP);
 | |
|         }
 | |
|         if (is_resource($this->handle[self::PERL])) {
 | |
|             $this->_close(self::PERL);
 | |
|         }
 | |
|         if (is_resource($this->handle[self::PERL_COMPLETE])) {
 | |
|             $this->_close(self::PERL_COMPLETE);
 | |
|         }
 | |
|         if (is_resource($this->handle[self::ERROR])) {
 | |
|             $this->_close(self::ERROR);
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Close a filehandle
 | |
|      *
 | |
|      * @param Loge $file The file to close
 | |
|      */
 | |
|     private function _close($file)
 | |
|     {
 | |
|         $filename = $this->getFile($file);
 | |
|         $extension = pathinfo($filename, PATHINFO_EXTENSION);
 | |
|         if ($extension == 'gz') {
 | |
|             gzclose($this->handle[$file]);
 | |
|         } else {
 | |
|             fclose($this->handle[$file]);
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Get an instance of Msd_Log
 | |
|      *
 | |
|      * @return Msd_Log
 | |
|      */
 | |
|     public static function getInstance()
 | |
|     {
 | |
|         if (self::$_instance === NULL) {
 | |
|             self::$_instance = new self;
 | |
|         }
 | |
|         return self::$_instance;
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Get an instance of Msd_Log for a special type
 | |
|      *
 | |
|      * Allowed types are self::PHP, self::PERL, self::PERL_COMPLETE or
 | |
|      * self::ERROR
 | |
|      *
 | |
|      * @param Msd_Log $type
 | |
|      *
 | |
|      * @return Msd_Log
 | |
|      */
 | |
|     public function getLogInstance($type)
 | |
|     {
 | |
|         if (!isset($this->_logInstance[$type])) {
 | |
|             $writer = new Zend_Log_Writer_Stream($this->getFile($type));
 | |
|             $formatter =
 | |
|                     new Zend_Log_Formatter_Simple("%timestamp% %message%\n");
 | |
|             $writer->setFormatter($formatter);
 | |
|             $this->_logInstance[$type] = new Zend_Log($writer);
 | |
|         }
 | |
|         return $this->_logInstance[$type];
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Write to log file
 | |
|      *
 | |
|      * @param string $type    The type of log file to write to
 | |
|      * @param string $message The message to add to the file
 | |
|      *
 | |
|      * @return bool
 | |
|      */
 | |
|     public static function write($type, $message)
 | |
|     {
 | |
|         // @todo if log_maxsize reached => archive/delete log
 | |
|         $logger = self::getInstance();
 | |
|         $log = $logger->getLogInstance($type);
 | |
|         return $log->info($message);
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Get the concrete filename with path for the given type.
 | |
|      *
 | |
|      * @param const $file
 | |
|      *
 | |
|      * @return string Filename of logfile
 | |
|      */
 | |
|     public function getFile($file)
 | |
|     {
 | |
|         $filename = '';
 | |
|         switch ($file) {
 | |
|             case self::PHP:
 | |
|                 $filename = $this->_paths->log . DS . 'php.log';
 | |
|                 break;
 | |
|             case self::PERL:
 | |
|                 $filename = $this->_paths->log . DS . 'perl.log';
 | |
|                 break;
 | |
|             case self::PERL_COMPLETE:
 | |
|                 $filename = $this->_paths->log . DS . 'perlComplete.log';
 | |
|                 break;
 | |
|             case self::ERROR:
 | |
|                 $filename = $this->_paths->log . DS . 'phpError.log';
 | |
|         }
 | |
|         return $filename;
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Delete a log file and recreate it.
 | |
|      *
 | |
|      * @param string $file      Filename
 | |
|      *
 | |
|      * @return void
 | |
|      */
 | |
|     public function delete($type)
 | |
|     {
 | |
|         $filename = self::getFile($type);
 | |
|         @unlink($filename);
 | |
|         // re-create log file
 | |
|         $translator = Msd_Language::getInstance()->getTranslator();
 | |
|         $this->write($type, $translator->_('L_LOG_CREATED'));
 | |
|     }
 | |
|     /**
 | |
|      * Read a logfile and return content as array.
 | |
|      *
 | |
|      * If $revers is set to true the ordering of lines is reversed.
 | |
|      *
 | |
|      * @param parent::const $type    The type of logfile to read
 | |
|      * @param boolean       $reverse Wether to place latest entries first
 | |
|      *
 | |
|      * @return array        Log data from file as array
 | |
|      */
 | |
|     public function read($type = self::PHP, $reverse = false)
 | |
|     {
 | |
|         $filename = $this->getFile($type);
 | |
|         if (!is_readable($filename)) {
 | |
|             $timestamp = Zend_Date::ISO_8601;
 | |
|             $lang = Msd_Language::getInstance()->getTranslator();
 | |
|             $msg = $timestamp . ' <span class="error">' .
 | |
|                 sprintf($lang->_('L_LOG_NOT_READABLE'), $filename) . '</span>';
 | |
|             return array($msg);
 | |
|         } else {
 | |
|             $output = file($filename);
 | |
|         }
 | |
|         if ($reverse == 1) {
 | |
|            $output = array_reverse($output);
 | |
|         }
 | |
| 
 | |
|         return $output;
 | |
|     }
 | |
| } |