【问题标题】:codeigniter alter Common.php functionscodeigniter 修改 Common.php 函数
【发布时间】:2012-09-16 07:52:35
【问题描述】:

我正在尝试自定义 codeigniter 的日志记录功能。我找到了这个论坛帖子,它准确地描述了我需要的东西: http://codeigniter.com/forums/viewthread/139997/ 但我想在不改变核心文件/类的情况下做到这一点。

我正在尝试更改 log_message 函数。我已经扩展了 CI_Log 类并且运行良好,但现在我正在尝试更改驻留在 system/core/Common.php 中的 log_message()。它实际上不是一个类,所以我不能扩展它,它只是看起来是一个有用函数的集合。我尝试重新声明 log_message() 并将其放在 application/core/Common.php 中,但这似乎没有工作。有什么想法可以解决这个问题吗?

【问题讨论】:

    标签: php class codeigniter logging


    【解决方案1】:

    我相信你真正想要改变的功能是write_log(),如果我错了,请纠正我。您可以通过扩展 application\libraries\MY_Log.php 中的函数来做到这一点。

    我的 MY_Log.php 中有以下脚本,每当出现错误时都会通过电子邮件发送给我:

    <?php  if ( ! defined('BASEPATH')) exit('No direct script access allowed');
    
    /* Extends the logging class to send an email when an error is triggered */
    
    class MY_Log extends CI_Log {
    
        function __construct()
        {
            parent::__construct();
        }
    
        function write_log($level = 'error', $msg, $php_error = FALSE, $additional, $additional2)
    
        {   
            if ($this->_enabled === FALSE)
            {
            return FALSE;
            }
    
             $level = strtoupper($level);
    
            if ( ! isset($this->_levels[$level]) OR ($this->_levels[$level] > $this->_threshold))
            {
            return FALSE;
            }
    
            $filepath = $this->_log_path.'log-'.date('Y-m-d').'.php';
            $message  = '';
    
            if ( ! file_exists($filepath))
            {
            $message .= "<"."?php  if ( ! defined('BASEPATH')) exit('No direct script access allowed'); ?".">\n\n";
            }
    
            if ( ! $fp = @fopen($filepath, FOPEN_WRITE_CREATE))
            {
            return FALSE;
            }
    
            $message .= $level.' '.(($level == 'INFO') ? ' -' : '-').' '.date($this->_date_fmt). ' --> '.$msg."\n";
    
            flock($fp, LOCK_EX);
            fwrite($fp, $message);
            flock($fp, LOCK_UN);
            fclose($fp);
    
            @chmod($filepath, FILE_WRITE_MODE);
            return TRUE;
        }
    
    }
    

    如果您不想扩展写入功能,则需要扩展其他日志功能之一。

    【讨论】:

    • 我已经扩展了 write_log() 来做我需要做的事情。我希望我可以扩展全局函数 log_message() 以便我在任何时候调用它时都可以传递一个日志名称并将消息记录到该特定日志中。我想我总是可以直接调用 write_log(),而不是通过 log_message()...
    • @Erreth - 我相信 log_message() 使用 write_log()。因此,当调用 log_message 时,调用仍将通过 write_log,允许您执行任何需要的附加功能。
    • @Erreth - 你到底想要改变什么?如果我有更多详细信息,我可能会提供更多帮助。
    • 您阅读我发布的论坛主题了吗?我正在尝试更改 log_message() 以便我可以向它传递一个附加参数 -> 日志文件的名称。这样我就可以将不同的事件记录到不同的文件中。我希望能够传递 log_message() 另一个参数,以便它可以调用我的扩展版本的 write_log() 传递日志名称。
    • @Erreth - 如果您不想修改任何核心文件,您需要将整个日志记录功能复制到您的MY_Log.php。然后不要在分机末尾拨打parent::write_log($level, $msg, $php_error);。我将修改我的代码以向您展示我的意思。
    【解决方案2】:

    辅助函数可以在这里工作。您必须使用它而不是 log_message()。

    这就是我所做的:

    在应用程序/帮助程序中,我创建了“new_log_helper.php”(帮助程序必须以 _helper.php 结尾) 我希望这可以将日志条目添加到数据库中并按进程进行跟踪(这样我就知道在代码中的位置)。

    <?php  if ( ! defined('BASEPATH')) exit('No direct script access allowed');
    /**
     * Custom Logging Interface
     *
     * Add log entries to a log table on the db and track process name
     *
     * @access  public
     * @return  void
     */
    if ( ! function_exists('new_log')) {
        function new_log($level = 'error', $message, $process, $php_error = FALSE)
        {
            if (config_item('log_threshold') == 0) {
                return;
            }
    
            $CI =& get_instance();
            $CI->load->model('new_log','logger', TRUE);
            $CI->logger->add_event($process, $level, $message);
    
            log_message($level, $process.': '.$message, $php_error);
        }
    }
    

    然后当你需要它时,像这样使用它:

    $this->load->helper('new_log');
    ...
    new_log('debug','Something happened','Stack overflow answer');
    

    无论如何,我知道你的问题是几年前的,但我一直在寻找,所以也许其他人也是。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-30
      • 1970-01-01
      • 2019-02-11
      • 1970-01-01
      • 1970-01-01
      • 2017-12-20
      相关资源
      最近更新 更多