ThinkChat🤖让你学习和工作更高效,注册即送10W Token,即刻开启你的AI之旅 广告
## 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)