<pre id="bbfd9"><del id="bbfd9"><dfn id="bbfd9"></dfn></del></pre>

          <ruby id="bbfd9"></ruby><p id="bbfd9"><mark id="bbfd9"></mark></p>

          <p id="bbfd9"></p>

          <p id="bbfd9"><cite id="bbfd9"></cite></p>

            <th id="bbfd9"><form id="bbfd9"><dl id="bbfd9"></dl></form></th>

            <p id="bbfd9"><cite id="bbfd9"></cite></p><p id="bbfd9"></p>
            <p id="bbfd9"><cite id="bbfd9"><progress id="bbfd9"></progress></cite></p>
            php語言

            PHP滾動日志的代碼實現

            時間:2025-05-17 07:13:26 php語言 我要投稿
            • 相關推薦

            PHP滾動日志的代碼實現

              所謂滾動日志,顧名思義,就是記錄一個模塊的日志用一系列的日志文件,同一模塊文件個數有限制,最多maxNum個,大小也有限制,最大maxSize字節,文件名有一定的命名方式,就跟隨百分網小編一起去了解下吧,想了解更多相關信息請持續關注我們應屆畢業生考試網!

            PHP滾動日志的代碼實現

              PHP滾動日志類庫

              PHP記錄日志,我之前接觸過的有按照年月分文件夾,然后按照日分文件的日志記錄方式,這種方式有利有弊,有他的使用場景,我今天要說的是另一種日志記錄方式——文件滾動方式記錄日志,當然了,這種滾動機制也可以加在前面那種日志記錄方式中。

              如何讓日志滾動起來

              滾動日志,顧名思義,記錄一個模塊的日志用一系列的日志文件,同一模塊文件個數有限制,最多maxNum個,大小也有限制,最大maxSize字節,文件名有一定的命名方式,比如:testlog.log、testlog_1.log,testlog_2.log、、、、、、其中testlog.log是正在使用的日志文件,當testlog.log文件大小到達限制maxSize的時候就會向后滾動日志文件,就像下面這樣:

              復制代碼 代碼如下:

              testlog_2.log  -> testlog_3.log

              testlog_1.log  -> testlog_2.log

              testlog.log  -> testlog_1.log

              testlog.log #0kb

              當日志文件個數到達限制maxNum的時候就會啟動淘汰機制,刪除最老的日志,比如說maxNum設置為10,這個時候算上testlog.log一共最多有10個文件,當滾動的時候如果存在testlog_9.log就會從testlog_8.log開始滾動,覆蓋掉testlog_9.log,這樣就可以保證日志正常記錄,而且不會出現很大很大的日志文件,保證日志系統的正常運行。

              代碼實現

              ?

              1

              2

              3  <?php

              final class LOGS {

              private $level;

              private $maxFileNum;

              private $maxFileSize;

              private $logPath;

              private $file;

              //日志的級別DEBUG,MSG,ERR

              const LOGS_DEBUG = 0;

              const LOGS_MSG = 1;

              const LOGS_ERR = 2;

              private static $instance = null;

              private function __construct(){}

              public static function getInstance()

              {

              if(self::$instance == null)

              {

              self::$instance = new self();

              }

              return self::$instance;

              }

              /**

              * @Desc 初始化

              * @Param $level int 記錄級別

              * @Param $maxNum int 最大日志文件數目

              * @Param $maxSize int 最大日志文件大小

              * @Param $logPath string 日志文件保存路徑

              * @Param $file string 日志文件名稱前綴

              * @Return boolean

              */

              public function init($level, $maxNum, $maxSize, $logPath, $file)

              {

              $level = intval($level);

              $maxNum = intval($maxNum);

              $maxSize = intval($maxSize);

              !is_dir($logPath) && mkdir($logPath, 0777, true);

              if(!in_array($level, array(self::LOGS_DEBUG, self::LOGS_MSG, self::LOGS_ERR)) || $maxNum <= 0 || $maxSize <= 0 || !is_dir($logPath))

              {

              return false;

              }

              $this->level = $level;

              $this->maxFileNum = $maxNum;

              $this->maxFileSize = $maxSize;

              $this->logPath = $logPath;

              $this->file = $file;

              return true;

              }

              /**

              * @Desc 獲取格式化時間串

              */

              public function formatTime()

              {

              $ustime = explode ( " ", microtime () );

              return "[" . date('Y-m-d H:i:s', time()) .".". ($ustime[0] * 1000) . "]";

              }

              /**

              * @Desc 滾動方式記錄日志文件

              */

              public function log($str)

              {

              $path = $this->logPath.DIRECTORY_SEPARATOR.$this->file.".log";

              clearstatcache();

              if(file_exists($path))

              {

              if(filesize($path) >= $this->maxFileSize)

              {

              $index = 1;

              //獲取最大的滾動日志數目

              for(;$index < $this->maxFileNum; $index++)

              {

              if(!file_exists($this->logPath.DIRECTORY_SEPARATOR.$this->file."_".$index.".log"))

              {

              break;

              }

              }

              //已經存在maxFileNum個日志文件了

              if($index == $this->maxFileNum)

              {

              $index--;

              }

              //滾動日志

              for(;$index > 1; $index--)

              {

              $new = $this->logPath.DIRECTORY_SEPARATOR.$this->file."_".$index.".log";

              $old = $this->logPath.DIRECTORY_SEPARATOR.$this->file."_".($index - 1).".log";

              rename($old, $new);

              }

              $newFile = $this->logPath.DIRECTORY_SEPARATOR.$this->file."_1.log";

              rename($path, $newFile);

              }

              }

              $fp = fopen($path, "a+b");

              fwrite($fp, $str, strlen($str));

              fclose($fp);

              return true;

              }

              /**

              * @Desc 記錄調試信息

              * @Param string 日志信息

              * @Param string 日志所在文件

              * @Param string 日志所在行

              */

              public function debug($msg, $file, $line)

              {

              if($this->level <= self::LOGS_DEBUG)

              {

              $this->log($this->formatTime()."[{$file}:{$line}]DEBUG: ${msg}\n");

              }

              }

              /**

              * @Desc 記錄信息

              * @Param string 日志信息

              * @Param string 日志所在文件

              * @Param string 日志所在行

              */

              public function msg($msg, $file, $line)

              {

              if($this->level <= self::LOGS_MSG)

              {

              $this->log($this->formatTime()."[{$file}:{$line}]MSG: ${msg}\n");

              }

              }

              /**

              * @Desc 記錄錯誤信息

              * @Param string 日志信息

              * @Param string 日志所在文件

              * @Param string 日志所在行

              */

              public function err($msg, $file, $line)

              {

              if($this->level <= self::LOGS_ERR)

              {

              $this->log($this->formatTime()."[{$file}:{$line}]ERR: ${msg}\n");

              }

              }

              }

            【PHP滾動日志的代碼實現】相關文章:

            php實現無限級分類實現代碼07-03

            PHP中如何實現crontab代碼05-30

            PHP實現大文件上傳源代碼10-21

            php的curl實現get和post的代碼07-07

            php進度條實現代碼09-20

            php代碼如何實現命令行執行05-19

            PHP圖片文件怎么上傳實現代碼10-14

            PHP類商品秒殺計時實現代碼07-15

            如何實現PHP靜態新聞列表自動生成代碼08-19

                    <pre id="bbfd9"><del id="bbfd9"><dfn id="bbfd9"></dfn></del></pre>

                    <ruby id="bbfd9"></ruby><p id="bbfd9"><mark id="bbfd9"></mark></p>

                    <p id="bbfd9"></p>

                    <p id="bbfd9"><cite id="bbfd9"></cite></p>

                      <th id="bbfd9"><form id="bbfd9"><dl id="bbfd9"></dl></form></th>

                      <p id="bbfd9"><cite id="bbfd9"></cite></p><p id="bbfd9"></p>
                      <p id="bbfd9"><cite id="bbfd9"><progress id="bbfd9"></progress></cite></p>
                      飘沙影院