Maison > développement back-end > tutoriel php > PHP 日志工具类

PHP 日志工具类

WBOY
Libérer: 2016-06-20 12:32:36
original
1348 Les gens l'ont consulté

好久没写php了,突然做个实验,发现竟然没有日志,哎

<?phpdefined('API') or exit('Access Denied');class Log{    private $FilePath;    private $FileName;    private $m_MaxLogFileNum;    private $m_RotaType;    private $m_RotaParam;    private $m_InitOk;    private $m_Priority;    private $m_LogCount;            const EMERG  = 0;    const FATAL  = 0;    const ALERT  = 100;    const CRIT   = 200;    const ERROR  = 300;    const WARN   = 400;    const NOTICE = 500;    const INFO   = 600;    const DEBUG  = 700;    const LOG_SUFFIXED = ".log.txt";     const DEFAULT_ROTE = 5242880;    /**     * @abstract 初始化     * @param String $dir 文件路径     * @param String $filename 文件名     * @return      */    public function __construct($dir, $filename, $priority = Log::INFO, $maxlogfilenum = 3, $rotatype = 1, $rotaparam = LOG::DEFAULT_ROTE)    {        $dot_offset = strpos($filename, ".");        if ($dot_offset !== false)            $this->FileName = substr($filename,0, $dot_offset);        else            $this->FileName = $filename;        $this->FilePath = $dir;        $this->m_MaxLogFileNum = intval($maxlogfilenum);        $this->m_RotaParam = intval($rotaparam);        $this->m_RotaType = intval($rotatype);        $this->m_Priority = intval($priority);        $this->m_LogCount = 0;        $this->m_InitOk = $this->InitDir();        umask(0000);         $path=$this->createPath($this->FilePath,$this->FileName);        if(!$this->isExist($path))        {            if(!$this->createDir($this->FilePath))            {                #echo("创建目录失败!");            }            if(!$this->createLogFile($path)){                #echo("创建文件失败!");            }        }    }                private function createPath($dir,$file)    {                $file = fopen($dir.DIRECTORY_SEPARATOR.$file,'w');        if($file)        {          fclose($file);        }                return $dir.DIRECTORY_SEPARATOR.$file;    }        private function InitDir()    {        if (is_dir($this->FilePath) === false)        {            if(!$this->createDir($this->FilePath))            {                //echo("创建目录失败!");                //throw exception                return false;            }        }        return true;    }  function console($priority, $log)      {          if ($this->m_InitOk == false)              return;          if ($priority > $this->m_Priority)              return;          $path = $this->getLogFilePath($this->FilePath, $this->FileName).Log::LOG_SUFFIXED;          $handle= fopen($path,"a+");          if ($handle === false)          {              return;          }                  $datestr = strftime("%Y-%m-%d %H:%M:%S ");          $caller_info = $this->get_caller_info();                 $status = fwrite($handle, $caller_info.$datestr.$log."\n");        if(!$status){//写日志失败              echo("写入日志失败");          }          fclose($handle);          $this->RotaLog();      }      /**     * @abstract 写入日志     * @param String $log 内容     */    function setLog($log)    {        $this->console(Log::NOTICE, $log);    }    function LogDebug($log)    {        $this->console(Log::DEBUG, $log);    }    function LogError($log)    {        $this->console(Log::ERROR, $log);    }    function LogNotice($log)    {        $this->console(Log::NOTICE, $log);    }       private function get_caller_info()    {    	$ret = debug_backtrace();    	foreach ($ret as $item)    	{    		if(isset($item['class']) && 'Logs' == $item['class'])    		{    			continue;    		}    		$file_name = basename($item['file']);    		return <<<S        {$file_name}:{$item['line']}  S;    	}    }    private function RotaLog()    {        $file_path = $this->getLogFilePath($this->FilePath, $this->FileName).LOG::LOG_SUFFIXED;        if ($this->m_LogCount%10==0)            clearstatcache();        ++$this->m_LogCount;        $file_stat_info = stat($file_path);        if ($file_stat_info === FALSE)            return;        if ($this->m_RotaType != 1)            return;             //echo "file: ".$file_path." vs ".$this->m_RotaParam."\n";        if ($file_stat_info['size'] < $this->m_RotaParam)            return;        $raw_file_path = $this->getLogFilePath($this->FilePath, $this->FileName);        $file_path = $raw_file_path.($this->m_MaxLogFileNum - 1).LOG::LOG_SUFFIXED;        //echo "lastest file:".$file_path."\n";        if ($this->isExist($file_path))        {            unlink($file_path);        }        for ($i = $this->m_MaxLogFileNum - 2; $i >= 0; $i--)        {            if ($i == 0)                $file_path = $raw_file_path.LOG::LOG_SUFFIXED;            else                $file_path = $raw_file_path.$i.LOG::LOG_SUFFIXED;            if ($this->isExist($file_path))            {                $new_file_path = $raw_file_path.($i+1).LOG::LOG_SUFFIXED;                if (rename($file_path, $new_file_path) < 0)                {                    continue;                }            }        }    }    function isExist($path){        return file_exists($path);    }    /**     * @abstract 创建目录     * @param <type> $dir 目录名     * @return bool     */    function createDir($dir){        //判断目录是否存在        return is_dir($dir) or ($this->createDir(dirname($dir)) and mkdir($dir, 0777));    }    /**     * @abstract 创建日志文件     * @param String $path     * @return bool     */    function createLogFile($path){        $handle=fopen($path,"w"); //创建文件        if($handle)        {        fclose($handle);        }        return $this->isExist($path);    }    /**     * @abstract 创建路径     * @param String $dir 目录名     * @param String $filename      */    function getLogFilePath($dir,$filename){        return $dir."/".$filename;    }}?>
Copier après la connexion


Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal