概述:
通过重写CI框架的Log类的方式来实现线上异常通知
- 在项目的 code 目录下创建 Log 类,因我配置subclass_prefix前缀是 SYS_,所以我创建的类名是SYS_Log
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
}
}
- 调用 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方法来实现