From 09596d92b2eea0f70c98cc5abca6f5dbd4629802 Mon Sep 17 00:00:00 2001 From: xue <> Date: Sun, 8 Jan 2006 18:13:02 +0000 Subject: Completed TLogger, TLogRouter, TFileLogRoute, TEmailLogRoute --- framework/Log/TLogRouter.php | 144 ++++++++++++++++++++++++++++--------------- 1 file changed, 96 insertions(+), 48 deletions(-) (limited to 'framework/Log/TLogRouter.php') diff --git a/framework/Log/TLogRouter.php b/framework/Log/TLogRouter.php index 5a3a59dc..98bded1c 100644 --- a/framework/Log/TLogRouter.php +++ b/framework/Log/TLogRouter.php @@ -1,9 +1,5 @@ - - -*/ + class TLogRouter extends TModule { const CONFIG_FILE_EXT='.xml'; @@ -23,7 +19,7 @@ class TLogRouter extends TModule else throw new TConfigurationException('logrouter_configfile_invalid',$this->_configFile); } - $this->loadConfig($xml); + $this->loadConfig($config); $this->getApplication()->attachEventHandler('EndRequest',array($this,'collectLogs')); } @@ -65,7 +61,17 @@ class TLogRouter extends TModule abstract class TLogRoute extends TComponent { - private static $_levelMap=array( + private static $_levelNames=array( + TLogger::ERROR=>'Error', + TLogger::DEBUG=>'Debug', + TLogger::INFO=>'Info', + TLogger::NOTICE=>'Notice', + TLogger::WARNING=>'Warning', + TLogger::ERROR=>'Error', + TLogger::ALERT=>'Alert', + TLogger::FATAL=>'Fatal' + ); + private static $_levelValues=array( 'error'=>TLogger::ERROR, 'debug'=>TLogger::DEBUG, 'info'=>TLogger::INFO, @@ -94,10 +100,9 @@ abstract class TLogRoute extends TComponent foreach(explode(',',$levels) as $level) { $level=trim($level); - if(isset(self::$_levelMap[$level])) - $this->_levels|=self::$_levelMap[$level]; + if(isset(self::$_levelValues[$level])) + $this->_levels|=self::$_levelValues[$level]; } - $this->_levels=$levels; } public function getCategories() @@ -115,36 +120,36 @@ abstract class TLogRoute extends TComponent } } + protected function getLevelName($level) + { + return isset(self::$_levelNames[$level])?self::$_levelNames[$level]:'Unknown'; + } + + protected function formatLogMessage($message,$level,$category,$time) + { + return @date('M d H:i:s',$time).' ['.$this->getLevelName($level).'] ['.$category.'] '.$message."\n"; + } + public function collectLogs() { $logs=Prado::getLogger()->getLogs($this->getLevels(),$this->getCategories()); $this->processLogs($logs); } - protected function processLogs($logs); + abstract protected function processLogs($logs); } class TFileLogRoute extends TLogRoute { private $_maxFileSize=1024; // in KB - private $_maxLogFiles=5; + private $_maxLogFiles=2; private $_logPath=null; - private $_fileName='prado.log'; - private $_levelMap=array( - TLogger::ERROR=>'Error', - TLogger::DEBUG=>'Debug', - TLogger::INFO=>'Info', - TLogger::NOTICE=>'Notice', - TLogger::WARNING=>'Warning', - TLogger::ERROR=>'Error', - TLogger::ALERT=>'Alert', - TLogger::FATAL=>'Fatal' - ); + private $_logFile='prado.log'; - public function init() + public function init($config) { if($this->_logPath===null) - throw new TConfigurationException('filelogroute_logfile_required'); + $this->_logPath=$this->getApplication()->getRuntimePath(); } public function getLogPath() @@ -158,14 +163,14 @@ class TFileLogRoute extends TLogRoute throw new TConfigurationException('filelogroute_logpath_invalid',$value); } - public function getFileName() + public function getLogFile() { - return $this->_fileName; + return $this->_logFile; } - public function setFileName($value) + public function setLogFile($value) { - $this->_fileName=$value; + $this->_logFile=$value; } public function getMaxFileSize() @@ -194,30 +199,16 @@ class TFileLogRoute extends TLogRoute protected function processLogs($logs) { - $str=''; - foreach($logs as $log) - $str.=$this->formatLogMessage($log[0],$log[1],$log[2],$log[3]); - $logFile=$this->_logPath.'/'.$this->_fileName; + $logFile=$this->_logPath.'/'.$this->_logFile; if(@filesize($logFile)>$this->_maxFileSize*1024) $this->rotateFiles(); - $fw=fopen($logFile,'a'); - fwrite($fw,$str); - fclose($fw); - } - - protected function formatLogMessage($message,$level,$category,$time) - { - return @date('M d H:i:s',$time).' ['.$this->getLevelName($level).'] ['.$category.'] '.$message."\n"; - } - - protected function getLevelName($level) - { - return isset(self::$_levelMap[$level])?self::$_levelMap[$level]:'Unknown'; + foreach($logs as $log) + error_log($this->formatLogMessage($log[0],$log[1],$log[2],$log[3]),3,$logFile); } - private function rotateFiles() + protected function rotateFiles() { - $file=$this->_logPath.'/'.$this->_fileName; + $file=$this->_logPath.'/'.$this->_logFile; for($i=$this->_maxLogFiles;$i>0;--$i) { $rotateFile=$file.'.'.$i; @@ -234,5 +225,62 @@ class TFileLogRoute extends TLogRoute } } +class TEmailLogRoute extends TLogRoute +{ + const EMAIL_PATTERN='/^([0-9a-zA-Z]+[-._+&])*[0-9a-zA-Z]+@([-0-9a-zA-Z]+[.])+[a-zA-Z]{2,6}$/'; + const DEFAULT_SUBJECT='Prado Application Log'; + private $_emails=array(); + private $_subject=''; + private $_from=''; + + protected function processLogs($logs) + { + $message=''; + $headers=($this->_from==='') ? '' : "From:{$this->_from}\r\n"; + $subject=$this->_subject===''?self::DEFAULT_SUBJECT:$this->_subject; + foreach($logs as $log) + $message.=$this->formatLogMessage($log[0],$log[1],$log[2],$log[3]); + $message=wordwrap($message,70); + foreach($this->_emails as $email) + mail($email,$subject,$message,$headers); + + } + + public function getEmails() + { + return $this->_emails; + } + + public function setEmails($emails) + { + $this->_emails=array(); + foreach(explode(',',$emails) as $email) + { + $email=trim($email); + if(preg_match(self::EMAIL_PATTERN,$email)) + $this->_emails[]=$email; + } + } + + public function getSubject() + { + return $this->_subject; + } + + public function setSubject($value) + { + $this->_subject=$value; + } + + public function getFrom() + { + return $this->_from; + } + + public function setFrom($value) + { + $this->_from=$value; + } +} ?> \ No newline at end of file -- cgit v1.2.3