日志类
今天我们来完成一个新的功能,这个功能是所有框架中必不可少的功能——日志类,日志类和其他的类有
一定的区别,因为日志有可能存储在文件中,有可能存储在数据库中,也甚至存在缓存当中,所以我们在
完成日志类的时候需要用到一种新的设计模式。这里我们实现的是文件存储
具体实现如下:
首先在lib目录下新建一个log.php
的log目录,如果我们将日志存储在文件中,就在log目录下创建一个file.php,如果将日志存储在数据库
中,我们就相应的在log目录下创建一个mysql.php,这里我们主要演示的是将日志存储在文件中。
这样我们的日志类就完成了,下面是生成的日志文件的内容
今天我们来完成一个新的功能,这个功能是所有框架中必不可少的功能——日志类,日志类和其他的类有
一定的区别,因为日志有可能存储在文件中,有可能存储在数据库中,也甚至存在缓存当中,所以我们在
完成日志类的时候需要用到一种新的设计模式。这里我们实现的是文件存储
具体实现如下:
首先在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 如果是多条日志的话可以将日志依次追加到文件后面,否则的话只会追加一条日
志
//如果并发量大的时候我们的日志文件就会特别的大,上面操作的目的是一个小时生成一个文件
}
}
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"