php日志记录类

 
更多

php日志记录类

<?php
/**********************************************************
 * File name: LogsClass.class.php
 * Class name: 日志记录类
 * Create date: 2008/05/14
 * Update date: 2008/09/28
 * Author: blue
 * Description: 日志记录类
 * Example: //设定路径和文件名
 * $dir="a/b/".date("Y/m",time());
 * $filename=date("d",time()).".log";
 * $logs=new Logs($dir,$filename);
 * $logs->setLog("test".time());
 * //使用默认
 * $logs=new Logs();
 * $logs->setLog("test".time());
 * //记录信息数组
 * $logs=new Logs();
 * $arr=array(
 * 'type'=>'info',
 * 'info'=>'test',
 * 'time'=>date("Y-m-d H:i:s",time())
 * );
 * $logs->setLog($arr);
 **********************************************************/
class Logs {
    private $_filepath; //文件路径
    private $_filename; //日志文件名
    private $_filehandle; //文件句柄
    

    /**
     *作用:初始化记录类
     *输入:文件的路径,要写入的文件名
     *输出:无
     */
    public function Logs($dir = null, $filename = null) {
        //默认路径为当前路径
        $this->_filepath = empty ( $dir ) ? '' : $dir;
        
        //默认为以时间+.log的文件文件
        $this->_filename = empty ( $filename ) ? date ( 'Y-m-d', time () ) . '.log' : $filename;
        
        //生成路径字串
        $path = $this->_createPath ( $this->_filepath, $this->_filename );
        //判断是否存在该文件
        if (! $this->_isExist ( $path )) { //不存在
            //没有路径的话,默认为当前目录
            if (! empty ( $this->_filepath )) {
                //创建目录
                if (! $this->_createDir ( $this->_filepath )) { //创建目录不成功的处理
                    die ( "创建目录失败!" );
                }
            }
            //创建文件
            if (! $this->_createLogFile ( $path )) { //创建文件不成功的处理
                die ( "创建文件失败!" );
            }
        }
        
        //生成路径字串
        $path = $this->_createPath ( $this->_filepath, $this->_filename );
        //打开文件
        $this->_filehandle = fopen ( $path, "a+" );
    }
    
    /**
     *作用:写入记录
     *输入:要写入的记录
     *输出:无
     */
    public function setLog($log) {
        //传入的数组记录
        $str = "";
        if (is_array ( $log )) {
            foreach ( $log as $k => $v ) {
                $str .= $k . " : " . $v . "\n";
            }
        } else {
            $str = $log . "\n";
        }
        
        //写日志
        if (! fwrite ( $this->_filehandle, $str )) { //写日志失败
            die ( "写入日志失败" );
        }
    }
    
    /**
     *作用:判断文件是否存在
     *输入:文件的路径,要写入的文件名
     *输出:true | false
     */
    private function _isExist($path) {
        return file_exists ( $path );
    }
    
    /**
     *作用:创建目录(引用别人超强的代码-_-;;)
     *输入:要创建的目录
     *输出:true | false
     */
    private function _createDir($dir) {
        return is_dir ( $dir ) or ($this->_createDir ( dirname ( $dir ) ) and mkdir ( $dir, 0777 ));
    }
    
    /**
     *作用:创建日志文件
     *输入:要创建的目录
     *输出:true | false
     */
    private function _createLogFile($path) {
        $handle = fopen ( $path, "w" ); //创建文件
        fclose ( $handle );
        return $this->_isExist ( $path );
    }
    
    /**
     *作用:构建路径
     *输入:文件的路径,要写入的文件名
     *输出:构建好的路径字串
     */
    private function _createPath($dir, $filename) {
        if (empty ( $dir )) {
            return $filename;
        } else {
            return $dir . "/" . $filename;
        }
    }
    
    /**
     *功能: 析构函数,释放文件句柄
     *输入: 无
     *输出: 无
     */
    function __destruct() {
        //关闭文件
        fclose ( $this->_filehandle );
    }
}
?>

修正:
1,不用每写一条日志就进行次文件的IO的操作,在对象声明时打开文件句柄
2,支持数组类型的日志记录
3,可使用默认路径和默认文件,为当前目录下的YYYY-MM-DD.log文件

 

打赏

本文固定链接: https://www.cxy163.net/archives/711 | 绝缘体

该日志由 绝缘体.. 于 2012年06月09日 发表在 PHP, 首页 分类下,
原创文章转载请注明: php日志记录类 | 绝缘体
关键字:
【上一篇】
【下一篇】

报歉!评论已关闭.