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)."\n";

$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)."\n";

               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文件夹
时间: 2024-10-10 21:15:28

CI框架中 日志输出方法log_message()只允许输出字符串解决方案的相关文章

ci框架操作数据库基本方法

授课过程中如果涉及到文件夹或目录时,可使用缩进进行演示: application |-----libraries |-----xxx_helper.php system |-----libraries |-----url_helper.php --------------------------------------------------------------------------------------------------------------------------------

CI框架中的SQL注入隐患

 0x00 在CI框架中,获取get和post参数是使用了$this->input类中的get和post方法. 其中,如果get和post方法的第二个参数为true,则对输入的参数进行XSS过滤,注意只是XSS过滤,并不会对SQL注入进行有效的防范. 例子: Controller中,定义一个shit方法,获取get数据: 指定了第二个参数为true: (1)XSS测试 (2)SQL注入测试 并不会对单引号进行处理. 例子在程式舞曲CMS中,该CMS是基于CI框架进行开发的CMS: 这里的变量

SSM框架中日志的打印和单例模式(六)

一.SSM框架中日志输出 1.src根目录下配置log4j.properties文件 #设置输出级别和输出目的地# log4j.rootLogger=info, stdout,logfile #把信息输出到控制台# log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.Target=System.err log4j.appender.stdout.layout=org.apache.log4j.S

开关控件在主流前端框架中的使用方法

本文仅介绍使用方法,后续再介绍实现方案及优劣对比. jquerymobile jqm可以使用checkbox和select模拟switch控件,只需要增加data-role='flipswitch'即可: 默认开关控件: <input type="checkbox" data-role="flipswitch" /> 若要变为选中状态,只需要增加一个checked属性即可,如下: <input type="checkbox" d

CI框架中 类名不能以方法名相同

昨天晚上一个坑爹的问题折腾了我一晚上,首先我来说下我的代码,我建立了一个index的控制器然后呢  在控制器里有一个index的方法.页面模板都有. if ( ! defined('BASEPATH')) exit('No direct script access allowed'); class Index extends CI_Controller{ public function index(){ $this->load->view('index.html'); } } 然后你在浏览器中

dwr框架中DWRUtil的方法

dwr框架中DWRUtil的方法 2008-10-14 17:57:23|  分类: JAVA |  标签: |举报 |字号大中小 订阅 7. util.js 功能 util.js包含了一些工具函数来帮助你用javascript数据(例如从服务器返回的数据)来更新你的web页面. 你可以在DWR以外使用它,因为它不依赖于DWR的其他部分.你可以下载整个DWR或者单独下载. 4个基本的操作页面的函数:getValue[s]()和setValue[s]()可以操作大部分HTML元素除了table,l

将smarty模版引擎整合到CI框架中

将smarty模版引擎整合到CI框架中. 下载:ci,smarty 配署ci 在这里就不多说了…… 1.  将下载好的smarty包的lib文件上传到ci中的application/libraries 文件中,将取名称修改为smarty,在libraries文件新建cismarty.php文件,内容如下: if (!defined('BASEPATH')) exit("no direct script access allowd"); //以下是加载smarty的类文件 require

对CI框架中几个文件libraries

对CI框架中几个文件libraries,helpers,hooks夹说明 来源:未知    时间:2014-10-20 11:37   阅读数:117   作者:xbdadmin [导读] 1.library文件夹 如果你想扩展CI的功能,那么就把你的类库放在这,注意,这个文件夹是有class组成的,可以看看如果 加载library注意事项 ! 2.helper文件夹 如果你需要使用一些函数来帮你... 1.library文件夹 如果你想扩展CI的功能,那么就把你的类库放在这,注意,这个文件夹是

CI框架中集成CKEditor编辑器的教程

CKEditor是在很多开发过程中都会用到的一个富文本编辑器,那么如何在CI框架中使用它呢?这里介绍了在CI下使用CKEditor的方法,版本比较低,是在CI 1.7.3下使用fckeditor 2.6.6.供大家参考. 1.将fckeditor目录置入CI_PATH/system/plugins/ 2.在CI_PATH/system/application/config/config.php中加入: $config['fckeditor_basepath'] = "/system/plugin