日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > php >内容正文

php

用php编写一个日志系统,php利用单例模式实现日志处理类库

發(fā)布時間:2023/12/4 php 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 用php编写一个日志系统,php利用单例模式实现日志处理类库 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

對于現(xiàn)在的應(yīng)用程序來說,日志的重要性是不言而喻的。很難想象沒有任何日志記錄功能的應(yīng)用程序運(yùn)行在生產(chǎn)環(huán)境中。日志所能提供的功能是多種多樣的,包括記錄程序運(yùn)行時產(chǎn)生的錯誤信息、狀態(tài)信息、調(diào)試信息和執(zhí)行時間信息等。在生產(chǎn)環(huán)境中,日志是查找問題來源的重要依據(jù)。應(yīng)用程序運(yùn)行時的產(chǎn)生的各種信息,都應(yīng)該通過日志類庫來進(jìn)行記錄。

/**

* 日志處理類

*

* @since alpha 0.0.1

* @date 2014.03.04

* @author genialx

*

*/

class Log{

//單例模式

private static $instance??? = NULL;

//文件句柄

private static $handle????? = NULL;

//日志開關(guān)

private $log_switch???? = NULL;

//日志相對目錄

private $log_file_path????? = NULL;

//日志文件最大長度,超出長度重新建立文件

private $log_max_len??????? = NULL;

//日志文件前綴,入 log_0

private $log_file_pre?????? = 'log_';

/**

* 構(gòu)造函數(shù)

*

* @since alpha 0.0.1

* @date 2014.02.04

* @author genialx

*/

protected function __construct(){//注意:以下是配置文件中的常量,請讀者自行更改

$this->log_file_path???? = LOG_FILE_PATH;

$this->log_switch???? = LOG_SWITCH;

$this->log_max_len??? = LOG_MAX_LEN;

}

/**

* 單利模式

*

* @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;

}

/**

*

* 日志記錄

*

* @param int $type? 0 -> 記錄(THING LOG) / 1 -> 錯誤(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->log_file_pre . $this->get_max_log_file_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;

}

}

}

/**

* 獲取當(dāng)前日志的最新文檔的后綴

*

* @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;

}

/**

* 關(guān)閉文件句柄

*

* @since alpha 0.0.1

* @date 2014.02.04

* @author genialx

*/

public function close(){

fclose(self::$handle);

}

}

功能說明:

該日志類利用單例模式,節(jié)省資源。自行判斷文件大小,超出指定大小則按序自行創(chuàng)建文件。如:文件log_0大于指定大小,則重新創(chuàng)建log_1文件(注意:創(chuàng)建文件是安裝文件名后綴的數(shù)字的,請勿隨意更改日志文件名)。

有待優(yōu)化:沒有指定文件的最大個數(shù),所以定期要手動刪除過多的日志文件。

調(diào)用示例:

//LOG

$L = Log::get_instance();

//第一個參數(shù) int 0代表事件記錄(THING LOG:),1代表錯誤記錄(ERROR LOG:)

//第二個參數(shù) string 描述文字

//第三個參數(shù) string 時間

$L->log(1,'日志描述', date('Y-n-j H:m:s'));

$L->close();

總結(jié)

以上是生活随笔為你收集整理的用php编写一个日志系统,php利用单例模式实现日志处理类库的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。