Home  >  Article  >  Backend Development  >  PHP uses singleton mode to implement log processing class library_PHP tutorial

PHP uses singleton mode to implement log processing class library_PHP tutorial

WBOY
WBOYOriginal
2016-07-13 10:39:12710browse

For today’s applications, the importance of logs is self-evident. It's hard to imagine an application running in a production environment without any logging capabilities. The functions that logs can provide are diverse, including recording error information, status information, debugging information and execution time information generated when the program is running. In a production environment, logs are an important basis for finding the source of problems. Various information generated when the application is running should be recorded through the log library.

Copy code The code is as follows:

/**
* Log processing class
*
* @since alpha 0.0.1
* @date 2014.03.04
* @author genialx
*
*/

class Log{

//Single case mode
private static $instance = NULL;
//File Handle
private static $handle = NULL;
//Log switch
private $log_switch = NULL;
//Log relative directory
private $log_file_path = NULL;
//Log The maximum length of the file, if the length is exceeded, re-create the file
private $log_max_len = NULL;
//Log file prefix, enter log_0
private $log_file_pre = 'log_';


/ **
* Constructor
*
* @since alpha 0.0.1
* @date 2014.02.04
* @author genialx
*/
protected function __construct(){//Note: The following are constants in the configuration file, readers are requested to change them by themselves

$this->log_file_path = LOG_FILE_PATH;

$this->log_switch = LOG_SWITCH;

$this->log_max_len = LOG_MAX_LEN;

}

/**
* Simple interest model
*
* @since alpha 0.0.1
* @date 2014.02.04
* @author genialx
*/
public static function get_instance(){
if(!self::$instance instanceof self){
self::$instance = new self;
}
return self::$instance;
}

/**
*
* Logging
*
* @param int $type 0 -> Record (THING LOG) / 1 -> Error (ERROR LOG)
* @param string $ desc
* @param string $time
*
* @since alpha 0.0.1
* @date 2014.02.04
* @author genialx
*
*/
public function log($type,$desc,$time){
if($this->log_switch){

if (self :: $ handle == null) {
$ FILENAME = $ this- & gt; log_file_pre. $ This- & gt; get_max_log_suf ();
Self :: $ handle = fopen ($ This ->log_file_path . $filename, 'a');
}
            switch($type){
                case 0:
                    fwrite(self::$handle, 'THING LOG:' . ' ' . $desc . ' ' . $time . chr(13));
                    break;
                case 1:
                    fwrite(self::$handle, 'ERROR LOG:' . ' ' . $desc . ' ' . $time . chr(13));
                    break;
                default:
                    fwrite(self::$handle, 'THING LOG:' . ' ' . $desc . ' ' . $time . chr(13));
                    break;
            }

        }
    }

    /**
* Get the suffix of the latest document of the current log
*
* @since alpha 0.0.1
* @date 2014.02.04
* @author genialx
*/
    private function get_max_log_file_suf(){
        $log_file_suf = null;
        if(is_dir($this->log_file_path)){
            if($dh = opendir($this->log_file_path)){
                while(($file = readdir($dh)) != FALSE){
                    if($file != '.' && $file != '..'){
                        if(filetype( $this->log_file_path . $file) == 'file'){
                            $rs = split('_', $file);
                            if($log_file_suf < $rs[1]){
                                $log_file_suf = $rs[1];
                            }
                        }
                    }
                }

                if($log_file_suf == NULL){
                    $log_file_suf = 0;
                }
                //截断文件
                if( file_exists($this->log_file_path . $this->log_file_pre . $log_file_suf) && filesize($this->log_file_path . $this->log_file_pre . $log_file_suf) >= $this->log_max_len){
                    $log_file_suf = intval($log_file_suf) + 1;
                }

                return $log_file_suf;
            }
}

return 0;

}

/**
* Close file handle
*
* @since alpha 0.0.1
* @date 2014.02.04
* @author genialx
*/
public function close(){
fclose(self: :$handle);
}
}

Function description:
This log class uses singleton mode to save resources. Determine the file size by yourself. If the size exceeds the specified size, create files in sequence. For example: the file log_0 is larger than the specified size, then the log_1 file is re-created (note: the created file is based on the number of the file name suffix, please do not change the log file name at will).

To be optimized: The maximum number of files is not specified, so excessive log files must be manually deleted regularly.

Call example:

Copy code The code is as follows:

//LOG
$L = Log::get_instance();
//The first parameter int 0 represents the event record (THING LOG:), 1 represents the error record (ERROR LOG:)
//The second parameter string description text
//The third parameter string time
$L->log(1,'Log description', date('Y-n-j H:m:s'));
$L->close();

www.bkjia.comtruehttp: //www.bkjia.com/PHPjc/732389.htmlTechArticleFor today’s applications, the importance of logs is self-evident. It's hard to imagine an application running in a production environment without any logging capabilities. The functions that logs can provide...
Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn