mvc(日誌類)

日誌類


今天我們來完成一個新的功能,這個功能是所有框架中必不可少的功能——日誌類,日誌類和其他的類有
一定的區別,因爲日誌有可能存儲在文件中,有可能存儲在數據庫中,也甚至存在緩存當中,所以我們在
完成日誌類的時候需要用到一種新的設計模式。這裏我們實現的是文件存儲 
具體實現如下:
首先在lib目錄下新建一個log.php
<?php
namespace core\lib;

class log
{
	static $class;
	/**
	 * 1.確定日誌的存儲方式
	 * 2.寫日誌
	 */
    
    static public function init(){
       //確定存儲方式
    	$drive = conf::get('DRIVE','log');
    	$class = '\core\lib\drive\log\\'.$drive;
    	self::$class = new $class;
    }

    static public function log($name,$file = 'log'){
       self::$class->log($name,$file);
    }
}
然後創建一個驅動文件夾,在lib下新建一個drive目錄,然後我們在drive下創建一個專門存儲日誌驅動
的log目錄,如果我們將日誌存儲在文件中,就在log目錄下創建一個file.php,如果將日誌存儲在數據庫
中,我們就相應的在log目錄下創建一個mysql.php,這裏我們主要演示的是將日誌存儲在文件中。

file.php

<?php
namespace core\lib\drive\log;
use core\lib\conf;
class file
{
	public $path;  //日誌的存儲位置
	public function __construct(){
		$conf = conf::get('OPTION','log');
		$this->path = $conf['PATH'];
	}
	public function log($message,$file = 'log'){
        /**
         * 1.確定文件的存儲位置是否存在
         * 2.寫入日誌
         */

        if(!is_dir($this->path.date('YmdH'))){
            mkdir($this->path.date('YmdH'),'0777',true); //這裏我們一定要注意給權限
        }
        
        return file_put_contents($this->path.date('YmdH').'/'.$file.'.php',date('Y-m-d 

H:i:s').json_encode($message).PHP_EOL,FILE_APPEND);

        //PHP_EOL 主要是自動換行的作用,讓我們的日誌文件更好看一點
        //FILE_APPEND 如果是多條日誌的話可以將日誌依次追加到文件後面,否則的話只會追加一條日

志
        //如果併發量大的時候我們的日誌文件就會特別的大,上面操作的目的是一個小時生成一個文件

	}
}


最後我們在系統的敏感位置記錄我們的日誌,這裏我的是主目錄文件imooc.php裏

if(is_file($ctrlfile)){
        	include $ctrlfile;
            $ctrl = new $cltrlClass();
            $ctrl->$action();
            \core\lib\log::log('ctrl:'.$ctrlClass.'     '.'action:'.$action);
        }else{
        	throw new \Exception('找不到控制器'.$ctrlClass);
        }


這樣我們的日誌類就完成了,下面是生成的日誌文件的內容

2016-10-03 20:09:49"ctrl:index     action:index"


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章