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"


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值