## 3.2 日志类
~~~
1. 新建 `log` 类
2. 创建日志配置文件
3. 日志文件以文件方式存储
4. 访问log类方法,写入日志
5. file方式存储日志
6. 在核心文件中,使用日志类写入日志
~~~
### 1. 新建 `log` 类
#### 确定存储方式:`init()`
*D:\wamp\www\web.com\core\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)
{
self::$class->log($name);
}
}
~~~
### 2. 创建日志配置文件
*D:\wamp\www\web.com\core\config\log.php*
~~~
<?php
return array(
'DRIVE'=>'log',
);
~~~
### 3. 日志文件以文件方式存储
*D:\wamp\www\web.com\core\lib\drive\log\file.php*
~~~
<?php
namespace core\lib\drive\log;
class file
{
public function log($name)
{
// 测试看日志类是否可以访问该方法
p($name);
}
}
~~~
### 4. 访问log类方法
*D:\wamp\www\web.com\app\ctrl\indexCtrl.php*
~~~
<?php
namespace app\ctrl;
class indexCtrl extends \core\thinkphp
{
public function index()
{
// 初始化日志log类,访问log方法
\core\lib\log::init();
\core\lib\log::log('test');
......
}
~~~
测试效果:在`http://web.com/index/index`打印出`test`。
### 5. file方式存储日志
*D:\wamp\www\web.com\core\lib\drive\log\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'].date('YmdH');
}
public function log($message, $file='log')
{
/**
* 过程
* 1. 确定文件的存储位置是否存在(创建目录)
* 2. 写入日志
*/
if (!is_dir($this->path)) {
mkdir($this->path, '0777', true);
}
$message = '++++++++++++'. date('Y-m-d H:i:s') .'++++++++++++' . PHP_EOL . json_encode($message);
p($message);
return file_put_contents($this->path.'/'.$file.'.php', $message.PHP_EOL.PHP_EOL, FILE_APPEND);
}
}
~~~
**分析:**
* 初始方法:读取保存日志的方式,获取日志文件的保存路径
* 写日志方法:自动创建目录,写入日志文件
[file_put_contents](http://php.net/manual/zh/function.file-put-contents.php) 将一个字符串写入文件
> 换行变量:PHP_EOL就是其中的一个,代表php的换行符,这个变量会根据平台而变,在windows下会是/r/n,在linux下是/n,在mac下是/r
优化日志类 *D:\wamp\www\web.com\core\lib\log.php* 使用2个变量
~~~
static public function log($message, $file='log')
{
self::$class->log($message, $file);
}
~~~
### 6. 在核心文件中,使用日志类写入日志
*D:\wamp\www\web.com\core\thinkphp.php*
~~~
<?php
namespace core;
class thinkphp
{
public $assign;
static public $classMap = array();
static public function run()
{
// 初始化日志类
\core\lib\log::init();
......
\core\lib\log::log('ctrl: '.$ctrlClass.'action: '.$action);
......
~~~
**效果**
![](https://box.kancloud.cn/2d17afadee5d805ee84de7ca1b9fbde3_1366x728.png)