| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125 | <?php//以下为日志interface ILogHandler{	public function write($msg);	}class CLogFileHandler implements ILogHandler{	private $handle = null;		public function __construct($file = '')	{		$this->handle = fopen($file,'a');	}		public function write($msg)	{		fwrite($this->handle, $msg, 4096);	}		public function __destruct()	{		fclose($this->handle);	}}class Log{	private $handler = null;	private $level = 15;		private static $instance = null;		private function __construct(){}	private function __clone(){}		public static function Init($handler = null,$level = 15)	{		if(!self::$instance instanceof self)		{			self::$instance = new self();			self::$instance->__setHandle($handler);			self::$instance->__setLevel($level);		}		return self::$instance;	}			private function __setHandle($handler){		$this->handler = $handler;	}		private function __setLevel($level)	{		$this->level = $level;	}		public static function DEBUG($msg)	{		self::$instance->write(1, $msg);	}		public static function WARN($msg)	{		self::$instance->write(4, $msg);	}		public static function ERROR($msg)	{		$debugInfo = debug_backtrace();		$stack = "[";		foreach($debugInfo as $key => $val){			if(array_key_exists("file", $val)){				$stack .= ",file:" . $val["file"];			}			if(array_key_exists("line", $val)){				$stack .= ",line:" . $val["line"];			}			if(array_key_exists("function", $val)){				$stack .= ",function:" . $val["function"];			}		}		$stack .= "]";		self::$instance->write(8, $stack . $msg);	}		public static function INFO($msg)	{		self::$instance->write(2, $msg);	}		private function getLevelStr($level)	{		switch ($level)		{		case 1:			return 'debug';		break;		case 2:			return 'info';			break;		case 4:			return 'warn';		break;		case 8:			return 'error';		break;		default:						}	}		protected function write($level,$msg)	{		if(($level & $this->level) == $level )		{			$msg = '['.date('Y-m-d H:i:s').']['.$this->getLevelStr($level).'] '.$msg."\n";			$this->handler->write($msg);		}	}}
 |