thinkphp核心源码注释|Log.class.php

<?php
// +----------------------------------------------------------------------
// | ThinkPHP [ WE CAN DO IT JUST THINK IT ]
// +----------------------------------------------------------------------
// | Copyright (c) 2006-2014 http://thinkphp.cn All rights reserved.
// +----------------------------------------------------------------------
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
// +----------------------------------------------------------------------
// | Author: liu21st <liu21st@gmail.com>
// +----------------------------------------------------------------------
namespace Think;
/**
 * 日志处理类
 * 今天开始处理日志类,据说 阿里的日志文件每天都是 TB 的量 计算的
 */
class Log {

    // 日志级别 从上到下,由低到高
    const EMERG     = 'EMERG';  // 严重错误: 导致系统崩溃无法使用
    const ALERT     = 'ALERT';  // 警戒性错误: 必须被立即修改的错误
    const CRIT      = 'CRIT';  // 临界值错误: 超过临界值的错误,例如一天24小时,而输入的是25小时这样
    const ERR       = 'ERR';  // 一般错误: 一般性错误
    const WARN      = 'WARN';  // 警告性错误: 需要发出警告的错误
    const NOTICE    = 'NOTIC';  // 通知: 程序可以运行但是还不够完美的错误
    const INFO      = 'INFO';  // 信息: 程序输出信息
    const DEBUG     = 'DEBUG';  // 调试: 调试信息
    const SQL       = 'SQL';  // SQL:SQL语句 注意只在调试模式开启时有效
    // 其实这个才是程序部分的精华
    // 日志信息
    static protected $log       =  array(); // 日志内存准备,这个应该跟靠谱一点的描述

    // 日志存储
    static protected $storage   =   null; // 是不是 跟着那个 protected static $storage = null
    // 找到了,原理是个 具体操作存储日志的 class的实例化 的对象

    // 日志初始化
    static public function init($config=array()){ // 这个初始化,可不是系统默认自动的初始化
        $type   =   isset($config['type']) ? $config['type'] : 'File'; // 日志类型,一般都是文件呢
        $class  =   strpos($type,'\\')? $type: 'Think\\Log\\Driver\\'. ucwords(strtolower($type));
        // 组合 class
        // if 那个 包含 \ 这个的话,其实就是证明了 是完整的路径,
        // 否则,变成了 驼峰命名法
        unset($config['type']);// 去掉了 当前的 ,防止 被处理掉
        self::$storage = new $class($config); // 处理了 这个
    }// 这个 是这个

    /**
     * 记录日志 并且会过滤未经设置的级别
     * @static
     * @access public
     * @param string $message 日志信息
     * @param string $level  日志级别
     * @param boolean $record  是否强制记录
     * @return void
     */
    static function record($message,$level=self::ERR,$record=false) {// 记录
        // 如果,允许记录,或者 strpos self::ERR ERR 这里的 如果不是这个
        if($record || false !== strpos(C('LOG_LEVEL'),$level)) {
            // 'LOG_LEVEL'             =>  'EMERG,ALERT,CRIT,ERR',// 允许记录的日志级别
            // 这里的让我懂了,其实,如果你不看这里的东西的话,so
            self::$log[] =   "{$level}: {$message}\r\n"; // 如:ERR:这个没什么位置。
        }// 或者
    }// 总结,按照他说的,就是,如果允许记录,或者,产生了,错误的日志的话,就会根据当前的日志基本 进行日志记录

    /**
     * 日志保存
     * @static
     * @access public
     * @param integer $type 日志记录方式
     * @param string $destination  写入目标
     * @return void
     * 保存日志
     */
    static function save($type='',$destination='') { // 保存 到数据里面了
        if(empty(self::$log)) return ;// 没数据了,搞啥呢?哈哈

        if(empty($destination)){// 写入目标, 如果没有目标 位置
            $destination = C('LOG_PATH').date('y_m_d').'.log'; // 促出的位置为 .log 类似
        }
        if(!self::$storage){// 如果没有这个 self   ,存储的设置个
            $type 	= 	$type ? : C('LOG_TYPE'); // 这个默认的三元运算符好用
            $class  =   'Think\\Log\\Driver\\'. ucwords($type);// 默认的
            self::$storage = new $class();            
        }
        $message    =   implode('',self::$log); // 将数组 转换成为 字符串,
        // 弄了半天,其实就是个 各种数据准备
        self::$storage->write($message,$destination);// 看来内置函数的高大尚上啊,其实好像就只有 sae 跟 普通文件 两种方式,感觉好像是很高大上的样子呢
        // 保存后清空日志缓存
        self::$log = array();
    }
    // 总结:数据准备---》外包----》打算房间,你觉得呢?有能跟上我的节奏的吗,哈哈

    /**
     * 日志直接写入
     * @static
     * @access public
     * @param string $message 日志信息
     * @param string $level  日志级别
     * @param integer $type 日志记录方式
     * @param string $destination  写入目标
     * @return void
     * 各个,你居然外包给我了,
     */
    static function write($message,$level=self::ERR,$type='',$destination='') {
        if(!self::$storage){
            $type 	= 	$type ? : C('LOG_TYPE');
            $class  =   'Think\\Log\\Driver\\'. ucwords($type);
            $config['log_path'] = C('LOG_PATH');
            self::$storage = new $class($config);            
        }// 在来一遍,这个你就不能 弄个 外包吗,不简单吗
        if(empty($destination)){
            $destination = C('LOG_PATH').date('y_m_d').'.log';        
        }// 位置
        self::$storage->write("{$level}: {$message}", $destination);
    }// 总结,还是外包,有意思吗?基本上就是别名啊,不过是个组合版本的别名,牛叉吧

}

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值