Ci 框架重写Log

341 阅读1分钟

概述:

通过重写CI框架的Log类的方式来实现线上异常通知

  1. 在项目的 code 目录下创建 Log 类,因我配置subclass_prefix前缀是 SYS_,所以我创建的类名是SYS_Log

截图.png 2. 重写 write_log 方法,CI 的log 方法是log_message(), 其实底层调用的就是write_log()

class SYS_Log extends CI_Log
{

    public function write_log($level, $msg)
    {
        /**
         * 所有的log都会调用这个方法,你可以通过 $level 来判断那些log需要发生通知
         */
        return parent::write_log($level, $msg); // TODO: Change the autogenerated stub
    }

}
  1. 调用 log_message(); 方法测试一下

代码加载原理: log_message() 初始化的是否会去找 code 目录下的Log 文件,在 application 目录下定义了 Log 文件后框架会自己加载,并且加载后就不再重新加载

function log_message($level, $message)
{
   static $_log;

   if ($_log === NULL)
   {
      // references cannot be directly assigned to static variables, so we use an array
      $_log[0] =& load_class('Log', 'core');
   }

   $_log[0]->write_log($level, $message);
}

通知机制:

常用的通知机制可以是短信、邮件、企业微信或钉钉等。

异常通知触发:

可以自己写一个类,专门接收处理异常通知,也可以根据框架通过扩展异常类来实现,还可以通过重写框架的log方法来实现