首頁 後端開發 php教程 php利用单例模式实现日志处理类库_php实例

php利用单例模式实现日志处理类库_php实例

Jun 07, 2016 pm 05:22 PM
單例模式 紀錄 類別庫

对于现在的应用程序来说,日志的重要性是不言而喻的。很难想象没有任何日志记录功能的应用程序运行在生产环境中。日志所能提供的功能是多种多样的,包括记录程序运行时产生的错误信息、状态信息、调试信息和执行时间信息等。在生产环境中,日志是查找问题来源的重要依据。应用程序运行时的产生的各种信息,都应该通过日志类库来进行记录。

复制代码 代码如下:

/**
 * 日志处理类
 *
 * @since alpha 0.0.1
 * @date 2014.03.04
 * @author genialx
 *
 */

class Log{

    //单例模式
    private static $instance    = NULL;
    //文件句柄
    private static $handle      = NULL;
    //日志开关
    private $log_switch     = NULL;
    //日志相对目录
    private $log_file_path      = NULL;
    //日志文件最大长度,超出长度重新建立文件
    private $log_max_len        = NULL;
    //日志文件前缀,入 log_0
    private $log_file_pre       = 'log_';

        
    /**
     * 构造函数
     *
     * @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;
            }

        }
    }

    /**
     * 获取当前日志的最新文档的后缀
     *
     * @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                                 $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;

    }

    /**
     * 关闭文件句柄
     *
     * @since alpha 0.0.1
     * @date 2014.02.04
     * @author genialx
     */
    public function close(){
        fclose(self::$handle);
    }
}

功能说明:
该日志类利用单例模式,节省资源。自行判断文件大小,超出指定大小则按序自行创建文件。如:文件log_0大于指定大小,则重新创建log_1文件(注意:创建文件是安装文件名后缀的数字的,请勿随意更改日志文件名)。

有待优化:没有指定文件的最大个数,所以定期要手动删除过多的日志文件。

调用示例:

复制代码 代码如下:

//LOG
$L = Log::get_instance();
//第一个参数 int 0代表事件记录(THING LOG:),1代表错误记录(ERROR LOG:)
//第二个参数 string 描述文字
//第三个参数 string 时间
$L->log(1,'日志描述', date('Y-n-j H:m:s'));
$L->close();
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1664
14
CakePHP 教程
1423
52
Laravel 教程
1317
25
PHP教程
1268
29
C# 教程
1246
24
win10的事件ID 6013是什麼? win10的事件ID 6013是什麼? Jan 09, 2024 am 10:09 AM

win10的日誌可以幫助使用者詳細的了解系統使用情況,很多的使用者在尋找自己的管理日誌的時候,一定都遇到過日誌6013吧,那麼這個程式碼的意思是什麼呢,下面就來介紹一下。 win10日誌6013是什麼:1.這個是正常的日誌。這個日誌的資訊並不是表示你的電腦重啟了,而是說明自從上次啟動以來,系統運行了多長的時間了。日誌會每天12點整出現一次。如何查看系統運作多久了,可以在cmd中輸入systeminfo。其中有一行就是。

解決Win10中的事件7034錯誤日誌問題 解決Win10中的事件7034錯誤日誌問題 Jan 11, 2024 pm 02:06 PM

win10的日誌可以幫助用戶詳細的了解系統使用情況,很多的用戶在尋找自己的管理日誌的時候,肯定都看到過很多的錯誤日誌吧,那麼該怎麼解決他們呢,下面就一起來看看吧。 win10日誌事件7034怎麼解決:1、點擊“開始”打開“控制面板”2、找到“管理工具”3、點擊“服務”4、找到HDZBCommServiceForV2.0右鍵“停止服務”,並改為“手動啟動」

Linux系統查看log日誌指令詳解! Linux系統查看log日誌指令詳解! Mar 06, 2024 pm 03:55 PM

在Linux系統中,可以使用下列指令來查看日誌檔案的內容:tail指令:tail指令用來顯示日誌檔案的末尾內容。它是查看最新日誌資訊的常用命令。 tail[選項][檔案名稱]常用的選項包括:-n:指定要顯示的行數,預設為10行。 -f:即時監視文件內容,並在文件更新時自動顯示新的內容。範例:tail-n20logfile.txt#顯示logfile.txt檔案的最後20行內容tail-flogfile.txt#即時監視logfile.txt檔案的更新內容head指令:head指令用於顯示記錄檔的開頭

如何在iPhone上的健康應用程式中查看您的用藥日誌記錄 如何在iPhone上的健康應用程式中查看您的用藥日誌記錄 Nov 29, 2023 pm 08:46 PM

iPhone可讓您在「健康」App中添加藥物,以便追蹤和管理您每天服用的藥物、維生素和補充劑。然後,您可以在設備上收到通知時記錄已服用或跳過的藥物。記錄用藥後,您可以查看您服用或跳過用藥的頻率,以幫助您追蹤自己的健康狀況。在這篇文章中,我們將指導您在iPhone上的健康應用程式中查看所選藥物的日誌歷史記錄。如何在「健康」App中查看用藥日誌歷史記錄簡短指南:前往「健康」App>瀏覽「>用藥」>用藥「>選擇一種用藥>」選項「&a

了解win10日誌中事件ID455的意義 了解win10日誌中事件ID455的意義 Jan 12, 2024 pm 09:45 PM

win10的日誌有著很多豐富的內容,很多的用戶在尋找自己的管理日誌的時候,肯定都見過事件ID455顯示錯誤,那麼它到底是什麼意思呢,下面就一起來看看。 win10日誌中事件ID455是什麼:1、ID455是訊息儲存開啟日誌檔案時<檔案>發生的錯誤<錯誤>

不同類型的Linux日誌檔及設定步驟 不同類型的Linux日誌檔及設定步驟 Feb 26, 2024 pm 10:54 PM

Linux日誌檔案種類及設定方法在Linux系統中,日誌檔案是非常重要的,它記錄了系統的運作狀態、使用者的操作以及各種事件的發生。透過查看日誌文件,系統管理員可以及時發現問題並進行相應的處理。本文將介紹Linux系統中常見的日誌檔案種類及如何設定日誌記錄。一、日誌檔案種類系統日誌:系統日誌是記錄系統運作狀態的日誌文件,包括系統啟動、關機、服務啟動和停止等信

Java 函數中日誌記錄機制的效能最佳化技巧? Java 函數中日誌記錄機制的效能最佳化技巧? May 02, 2024 am 08:06 AM

日誌記錄優化技巧:停用調試日誌以消除影響。批次處理日誌訊息以減少開銷。採用非同步日誌記錄以卸載日誌操作。限制日誌檔案大小以提高應用程式啟動和處理效能。

C++ 函式重載與重寫中單例模式與工廠模式的運用 C++ 函式重載與重寫中單例模式與工廠模式的運用 Apr 19, 2024 pm 05:06 PM

單例模式:透過函數重載提供不同參數的單例實例。工廠模式:透過函數重寫建立不同類型的對象,實現創建過程與特定產品類別的解耦。

See all articles