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 = []; private static $sqlog = false; public static function start_sql_log() { self::$sqlog = []; } 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()); if(defined('USE_COROUTINE') && USE_COROUTINE === true) { $pid = getmypid(); $cid = Swoole\Coroutine::getCid(); $pid = "{$pid}-{$cid}"; } else { $pid = posix_getpid(); } $appid = empty(APP_ID) ? '' : APP_ID; $log_file = BASE_DATA_PATH . '/log/' . date('Ymd', time()) . '-' . $appid . '.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+'); } $content = "[{$pid} {$now}] {$level}: {$message}\r\n"; $ret = fwrite(self::$cur_file, $content); if ($ret === false) { self::$cur_file = fopen($log_file, 'a+'); fwrite(self::$cur_file, $content); } fflush(self::$cur_file); } 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; } }