zoukankan      html  css  js  c++  java
  • CI框架中 日志输出方法log_message()只允许输出字符串解决方案

    1.修改CodeIgniter/index.php,添加如下:
    define('ROOTDIR',dirname(__FILE__).'/');
    
    2.修改CodeIgniter/application/config/config.php,如下:
    $config['log_threshold'] = 1;
    $config['log_path'] = ROOTDIR.'logs/';
    
    3.修改CodeIgniter/system/core/Common.php,如下:
    a.找到log_message()方法,将行
    $_log->write_log($level, $message, $php_error);
    替换为
    $_log->appendLog($level, $message, $php_error);
    b.添加如下方法(该方法根据实际需求情况决定是否需要,此处非必要)
        function write_message($message, $fileName = '')
        {
                static $_log;
    
                $_log =& load_class('Log');
                $_log->writeLog($message, $fileName);
    
        }
        
    4.修改CodeIgniter/system/libraries/Log.php
    a.添加属性
    protected $_log = '';
    b.找到属性$_levels,将行
    protected $_levels = array('ERROR' => '1', 'DEBUG' => '2',  'INFO' => '3', 'ALL' => '4');
    替换为
    // modified by xcg add -1
    protected $_levels = array('ERROR' => '1', 'DEBUG' => '2',  'INFO' => '3', 'ALL' => '4', 'NORMAL' => '-1');
    c.在构造方法 __construct()最后添加如下语句
    // add by xcg
    register_shutdown_function(array(& $this, '__writeLog'));
    d.添加如下方法
    // add by xcg for cache log
    public function appendLog($level = 'error', $msg, $php_error = FALSE)
    {
    if ($this->_enabled === FALSE)
    {
    return FALSE;
    }
    $level = strtoupper($level);
    if ( ! isset($this->_levels[$level]) OR ($this->_levels[$level] > $this->_threshold))
    {
    return FALSE;
    }
    
    $msg = $level.' '.(($level == 'INFO') ? ' -' : '-').' '.date($this->_date_fmt). '  '.print_r($msg, true)."
    ";
    
    $this->_log .= $msg;
    }
    // add by xcg for writing log when request terminated
    function __writeLog()
            {
                $filepath = $this->_log_path.'ci-'.date('Y-m-d').".log";
    
                if ( ! $fp = @fopen($filepath, FOPEN_WRITE_CREATE))
                {
                        return FALSE;
                }
                flock($fp, LOCK_EX);
                fwrite($fp, $this->_log);
                flock($fp, LOCK_UN);
                fclose($fp);
    
                @chmod($filepath, FILE_WRITE_MODE);
                return TRUE;
    
            }
    
            // add by xcg for writing log to a special file.
    function writeLog($message, $fileName = '')
       {
           $filepath = !empty($fileName)?$this->_log_path.$fileName:$this->_log_path.'ci-'.date('Y-m-d').".log";
    
                   if ( ! $fp = @fopen($filepath, FOPEN_WRITE_CREATE))
                   {
                           return FALSE;
                   }
    
                   $message = date($this->_date_fmt). '  '.print_r($message, true)."
    ";
    
                   flock($fp, LOCK_EX);
                   fwrite($fp, $message);
                   flock($fp, LOCK_UN);
                   fclose($fp);
    
                   @chmod($filepath, FILE_WRITE_MODE);
                   return TRUE;
    
       }
    
    5.最后,在apache或nginx的web目录下的CodeIgniter项目根目录下新建一个权限为777的logs文件夹
  • 相关阅读:
    csdn已成垃圾站了,基本不能常上了
    pymssql under ubuntu
    csdn已成垃圾站了,基本不能常上了
    redis记录
    redis记录
    pythonictclas2009编译小捷
    tar打包
    跳过mysql直奔nosql推荐时代
    pymssql under ubuntu
    Bottle中文文档
  • 原文地址:https://www.cnblogs.com/hgj123/p/3972868.html
Copyright © 2011-2022 走看看