## 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);
......
~~~
**效果**
