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文件夹

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

  1. CI 框架中的日志处理 以及 404异常处理

    最近在整理项目中的日志问题,查了一些关于 “CI 框架中的日志处理 以及 404异常处理” 的东西,顺便记录一下: 关于错误日志: 1. 在CI框架中的 system/core/CodeIgniter ...

  2. php CI框架中URL特殊字符处理与SQL注入隐患

    php CI框架中URL特殊字符处理与SQL注入隐患 php CI框架中URL特殊字符有很多是不支持的,导致像c++,括号这些常用的分类,字符都无法正常显示很头痛,而在配置里增加单引号' 反斜杠\ 这 ...

  3. CI 框架中的自定义路由规则

    在 CI 框架中,一个 URL 和它对应的控制器中的类以及类中的方法是一一对应的,如: www.test.com/user/info/zhaoyingnan 其中 user 对应的就是控制器中的 us ...

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

    CKEditor是在很多开发过程中都会用到的一个富文本编辑器,那么如何在CI框架中使用它呢?这里介绍了在CI下使用CKEditor的方法,版本比较低,是在CI 1.7.3下使用fckeditor 2. ...

  5. dwr框架中DWRUtil的方法

    dwr框架中DWRUtil的方法 2008-10-14 17:57:23|  分类: JAVA |  标签: |举报 |字号大中小 订阅     7. util.js 功能 util.js包含了一些工 ...

  6. 对CI框架中几个文件libraries

    对CI框架中几个文件libraries,helpers,hooks夹说明 来源:未知    时间:2014-10-20 11:37   阅读数:117   作者:xbdadmin [导读] 1.lib ...

  7. php json_encode在CI框架中的使用细节

    这个错误的造成原因是加载类类库,转换成json格式的时候不熟悉CI框架的规定导致的,CI框架中规定在将数据转换成json格式的时候需要将类库小写,当然了,调用的时候必须保证有这个类库,且可以在对应的文 ...

  8. CI框架中的奇葩

    今天在win下开发,使用ci框架,本来是没有任何问题,然后转向了mac上开发,结果出现了个奇葩的问题,就是在ci框架中,控制器命名以"Admin_"为前缀的,在url中,控制器也必 ...

  9. php ci框架中载入css和js文件失败的原因及解决方法

    在将html页面整合到ci框架里面的时候,载入css和js失败. 原因是ci框架是入口的框架 对框架中文件的全部请求都须要经过index.php处理完毕,当载入外部的css和js文件的时候要使 用ba ...

随机推荐

  1. ESLint:can not ESLint annotation...

    刚开始用webstorm开发VUE,提示这个东西: 安装一个npm库就可以了 命令行执行:npm install eslint -g

  2. OpenStack 实现技术分解 (5) 应用开发 — 使用 OpenStackClients 进行二次开发

    文件夹 文件夹 前文列表 參考阅读 前言 OpenStackClients 使用 OpenStackClients 获取 project_client object 的 demo 调用 project ...

  3. [ES6] 08. Destructuring Assignment -- 1

    Here is the way you get value from an object: var obj = { color: "blue" } console.log(obj. ...

  4. Word2007中插入公式之后,公式上下有很大的空白

    word 2007 选中一个公式,选择页面布局,点击页面设置右下角的小箭头,在弹出的对话框中,选择文档网格,在网格选项中选择无网格,确定,行距正常了. 选择一个公式,所有的公式行距都会变. Word ...

  5. RxJava2.0教程

    尝试在新的项目中,引用一些流行的优秀的开源框架,在简书上偶然发现一篇很棒的写RxJava 2.0的帖子,个人认为非常适合Android开发者,你可以先知道怎么使用,然后再弄清楚里面做了哪些事情,例如可 ...

  6. Unity 3d导入3dMax模型 产生若干问题

    Unity 3d导入3dMax模型 会产生若干问题,按照官方 的说明,将max 模型导成fbx文件 导入untiy似乎也不能解决 1.x轴向偏转3dmax模型导入后自动有一个x轴270度的偏转,巧合的 ...

  7. 01-hibernate注解:类级别注解,@Entity,@Table,@Embeddable

    @Entity @Entity:映射实体类 @Entity(name="tableName") name:可选,对应数据库中一个表,若表名与实体类名相同,则可以省略. 注意:使用@ ...

  8. jquery 实现菜单的下拉菜单

    实现效果如图: 源码: 到此下载

  9. j2ee高并发时使用全局变量需要注意的问题

    原文:https://blog.csdn.net/jston_learn/article/details/21617311 开发中,全局变量的使用很频繁,但对于多线程的访问,使用全局变量需要注意的地方 ...

  10. bootstrap 学习笔记 轮播(Carousel)插件

    Bootstrap轮播(carousel)插件是一种灵活的响应式的向站点添加滑块的方式.除些之外,内容也是足够灵活的,可以是图像,内嵌框架,视频或者其他您想要旋转的任何类型的内容. 示例: 下面是不念 ...