Codeigniter 代码点火器:使用load_类

Codeigniter 代码点火器:使用load_类,codeigniter,logging,Codeigniter,Logging,我正在编写自己的日志类以将数据保存在数据库中。当我查看CI的工作方式时,我注意到有一个处理日志记录的log\u message()函数。有一个load\u类功能我无法分配给CI用户指南中的任何内容 1他们为什么要把它放在一个额外的功能中 2从何处加载此函数文件 希望有一些CI人员如何回答:-)简短回答: 您可以编写自己的日志类以覆盖默认CI类: <?php // this file is /application/libraries/MY_Log.php class MY_Log exte

我正在编写自己的日志类以将数据保存在数据库中。当我查看CI的工作方式时,我注意到有一个处理日志记录的
log\u message()
函数。有一个
load\u类
功能我无法分配给CI用户指南中的任何内容

1他们为什么要把它放在一个额外的功能中

2从何处加载此函数文件


希望有一些CI人员如何回答:-)

简短回答: 您可以编写自己的日志类以覆盖默认CI类:

<?php
// this file is /application/libraries/MY_Log.php
class MY_Log extends CI_Log {
    public function write_log($level = 'error', $msg, $php_error = FALSE)
    {
        // Put your own logging function in here.
        // If you want it to still log to a file as usual, use this:
        parent::write_log($level, $msg, $php_error);
    }
}
这将按顺序运行以下检查:

  • 如果日志类已经存在,我们就完成了。归还单身汉
  • 如果没有,首先检查
    /system/libraries
    文件夹中的“Log.php”文件
  • 如果步骤#2不存在文件,现在检查
    /application/libraries
    中的“MY_Log.php”文件(或配置中设置的任何子类前缀)
  • 如果它加载了默认CI类(从
    /system
    文件夹),但在
    /application
    下确实有一个扩展类,那么也加载该类
  • 返回该类的新实例(如果存在,则返回您的实例;否则,它是CI_*类)
  • 实际上,我从未需要使用
    load\u class()
    函数,因为它允许相当无缝的扩展。然而,知道它是如何工作的是件好事


    因此,要重写一个类,首先要找到原始类所在的位置(通常是
    /system/libraries
    /system/core
    )。将扩展文件放在相应的
    /application
    文件夹中(这很重要!如果在
    /system/core
    下,则扩展必须在
    /application/core
    下)。在文件名和类名前面加上
    MY
    (或您在配置中设置的任何内容),并让它扩展
    CI
    基类。

    谢谢您的简短回答。非常感谢你的长篇大论!我想CI人不会让我们用它的?!为什么不在用户指南中?不管怎样,现在我知道如何扩展日志文件了。这比构建一个新的库文件要好得多。
    $_log =& load_class('Log');
    $_log->write_log($level, $message, $php_error);