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文件夹
CI框架中 日志输出方法log_message()只允许输出字符串解决方案的更多相关文章
- CI 框架中的日志处理 以及 404异常处理
最近在整理项目中的日志问题,查了一些关于 “CI 框架中的日志处理 以及 404异常处理” 的东西,顺便记录一下: 关于错误日志: 1. 在CI框架中的 system/core/CodeIgniter ...
- php CI框架中URL特殊字符处理与SQL注入隐患
php CI框架中URL特殊字符处理与SQL注入隐患 php CI框架中URL特殊字符有很多是不支持的,导致像c++,括号这些常用的分类,字符都无法正常显示很头痛,而在配置里增加单引号' 反斜杠\ 这 ...
- CI 框架中的自定义路由规则
在 CI 框架中,一个 URL 和它对应的控制器中的类以及类中的方法是一一对应的,如: www.test.com/user/info/zhaoyingnan 其中 user 对应的就是控制器中的 us ...
- CI框架中集成CKEditor编辑器的教程
CKEditor是在很多开发过程中都会用到的一个富文本编辑器,那么如何在CI框架中使用它呢?这里介绍了在CI下使用CKEditor的方法,版本比较低,是在CI 1.7.3下使用fckeditor 2. ...
- dwr框架中DWRUtil的方法
dwr框架中DWRUtil的方法 2008-10-14 17:57:23| 分类: JAVA | 标签: |举报 |字号大中小 订阅 7. util.js 功能 util.js包含了一些工 ...
- 对CI框架中几个文件libraries
对CI框架中几个文件libraries,helpers,hooks夹说明 来源:未知 时间:2014-10-20 11:37 阅读数:117 作者:xbdadmin [导读] 1.lib ...
- php json_encode在CI框架中的使用细节
这个错误的造成原因是加载类类库,转换成json格式的时候不熟悉CI框架的规定导致的,CI框架中规定在将数据转换成json格式的时候需要将类库小写,当然了,调用的时候必须保证有这个类库,且可以在对应的文 ...
- CI框架中的奇葩
今天在win下开发,使用ci框架,本来是没有任何问题,然后转向了mac上开发,结果出现了个奇葩的问题,就是在ci框架中,控制器命名以"Admin_"为前缀的,在url中,控制器也必 ...
- php ci框架中载入css和js文件失败的原因及解决方法
在将html页面整合到ci框架里面的时候,载入css和js失败. 原因是ci框架是入口的框架 对框架中文件的全部请求都须要经过index.php处理完毕,当载入外部的css和js文件的时候要使 用ba ...
随机推荐
- JQuery的get、post和ajax方法的使用
在JQuery中可以使用get,post和ajax方法给服务器端传递数据 get方法的使用(customForGet.js文件): function verify(){ //1.获取文本框的数据 // ...
- Boost.Asio c++ 网络编程翻译(21)
同步VS异步 Boost.Asio的作者做了一个非常惊艳的工作:它能够让你在同步和异步中自由选择,从而更好的适应你的应用. 在之前的章节中,我们学习了每种类型应用的框架,比方同步client,同步服务 ...
- 【一步一步走(1)】远程桌面软件VNC的安装与配置
近期在VPS上搭建Python Web环境.走了非常多弯路,借此记下. 先说说购买的VPS(PhotonVPS),我可不是打广告.仅仅是感觉这个VPS服务提供商还不错推荐给你大家,我之前也是体验过阿里 ...
- java阅读笔记
前言:面向对象设计的几大原则? 1>针对接口编程,而不是针对实现编程 2>优先使用对象组合,而不是类继承 1.只根据抽象类中定义的接口来操纵对象有以下两个好处? 1)客户无须知道他们使用对 ...
- Why do Antennas Radiate?
Obtaining an intuitive idea for why antennas radiate is helpful in understanding the fundamentals of ...
- 使用Monkeyrunner进行Android自动化的总结
http://www.2cto.com/kf/201411/356056.html 使用Monkeyrunner进行Android自动化的总结 使用Android自动化的方式,不仅可以用来对Andro ...
- SQL SERVER 如何处理带字母的自增列--【叶子】
--需求说明: /* id col ---------- ---------- AB00001 a AB00002 b --当再插入数据的时候让id自动变成AB00003 ...
- 补习知识:Entity Framework Code First属性映射约定
Entity Framework Code First与数据表之间的映射方式有两种实现:Data Annotation和Fluent API.本文中采用创建Product类为例来说明tity Fram ...
- Android studio 使用心得(三)—从Eclipse迁移到Android studio
断断续续的也算是把eclipse上的代码成功迁移到android studio上来了,现在,我同事继续用eclipse,我用android studio,svn上还是之前eclipse的项目,迁移成功 ...
- DS18B20 crc 算法
http://blog.csdn.net/pengrui18/article/details/24740973 https://www.maximintegrated.com/cn/app-notes ...