mTag = $tag; Log::record("{$this->mTag} begin----------------------------",Log::DEBUG); } public function __destruct() { Log::record("{$this->mTag} end ----------------------------",Log::DEBUG); } } class Log { const open_sql = true; const SQL = 1; const INFO = 2; const DEBUG = 3; const WARING = 4; const ERR = 5; const RUN = 6; const WAIT_HANDLE = 10; const cur_level = self::DEBUG; private static $log = array(); private static $sqlog = false; public static function start_sql_log() { self::$sqlog = array(); } public static function sql_log() { if(is_array(self::$sqlog)) { return self::$sqlog; } else { return []; } } public static function end_sql_log() { self::$sqlog = false; } private static function add_sql_log($log) { if(is_array(self::$sqlog)) { self::$sqlog[] = $log; } } //////////////////////////////////////////////////////////////////////////////////////////////////////////////////// static private $cur_path_file_name = ''; static private $cur_path_file; public static function record_path($content) { $path_file = BASE_DATA_PATH . '/log/' . date('Ymd', time()) . '_path.log'; if(self::$cur_path_file_name != $path_file) { if(self::$cur_path_file != null) { fclose(self::$cur_path_file); } self::$cur_path_file = fopen($path_file,'a'); } if (@flock(self::$cur_path_file, LOCK_EX)) { fwrite(self::$cur_path_file,$content); fwrite(self::$cur_path_file,"\r\n"); @flock(self::$cur_path_file, LOCK_UN); } } //////////////////////////////////////////////////////////////////////////////////////////////////////////////////// public static function record($message, $lev = self::ERR) { $now = @date('Y-m-d H:i:s', time()); $pid = posix_getpid(); if($lev == self::WAIT_HANDLE) { $level = 'WAIT_HANDLE'; $log_file = BASE_DATA_PATH.'/log/'.date('Ymd',time()).'-wait.log'; $content = "[{$pid} {$now}] {$level}: {$message}\r\n"; file_put_contents($log_file,$content, FILE_APPEND); return; } if($lev == self::SQL) { $level = 'SQL'; if(self::open_sql) { self::write($message,$level); } return; } if($lev >= self::cur_level && $lev <= self::RUN) { $level = self::get_level($lev); self::write($message,$level); } if($lev == self::ERR) { self::msg(); } } private static $cur_file_name; private static $cur_file = null; private static function write($message,$level) { $now = @date('Y-m-d H:i:s', time()); $pid = posix_getpid(); $log_file = BASE_DATA_PATH . '/log/' . date('Ymd', time()) . '.log'; if(self::$cur_file_name != $log_file) { if(self::$cur_file != null) { fclose(self::$cur_file); } self::$cur_file_name = $log_file; self::$cur_file = fopen($log_file,'a+'); chmod($log_file,777); } $content = "[{$pid} {$now}] {$level}: {$message}\r\n"; $ret = fwrite(self::$cur_file,$content); if($ret === false) { self::$cur_file = fopen($log_file,'a+'); chmod($log_file,777); fwrite(self::$cur_file,$content); } } public static function endl($lev = self::ERR) { $content = "\r\n"; if($lev == self::SQL && self::open_sql) { $log_file = BASE_DATA_PATH.'/log/'.date('Ymd',time()).'.log'; file_put_contents($log_file,$content, FILE_APPEND); return; } if($lev >= self::cur_level) { $log_file = BASE_DATA_PATH . '/log/' . date('Ymd', time()) . '.log'; file_put_contents($log_file, $content, FILE_APPEND); } } public static function 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 .= "]"; return $stack; } private static function get_level($lev) { if($lev == self::INFO) return 'INFO'; if($lev == self::DEBUG) return 'DEBUG'; if($lev == self::WARING) return 'WARING'; if($lev == self::ERR) return 'ERR'; if($lev == self::RUN) return 'RUN'; return 'Unknown'; } public static function read() { return self::$log; } }