php error_log 函数的使用


Posted in PHP onApril 13, 2009

我们来大致了解一下error_log()函数。我们看下手册的解释:

error_log
(PHP 3, PHP 4, PHP 5)

bool error_log ( string message [, int message_type [, string destination [, string extra_headers]]] )
发送一个错误信息到Web服务器的错误日志,一个TCP的端口或者是一个文件。

[separator]

我们看它的参数,第一个参数message是消息内容,第二个参数type是消息类型,第三个参数是目标文件,第四个参数是其他的头信息。其实一般第四个参数都用不到,我们主要看前面三个参数,第二个参数是消息类型,包括0, 1, 2, 3等四种类型,0是默认的类型。四个类型的作用:

0
信息内容发送到PHP的系统日志记录,使用操作系统的自己的日志记录机制或一个文件,整个取决于php.ini中的配置选项error_log的内容。这是缺省选项。

1
把信息内容发送到一个邮件地址,第三个参数就是一个邮件地址,第四个参数是一个头信息发送邮件的,第二个类型使用mail()函数来发送邮件

2
消息通过PHP的调试服务器,远程的写入到某个PHP调试服务器上,当然,PHP在编译的时候--enable-debugger必须打开,另外,整个类型只是针对PHP 3有效

3
消息作为一个新行附加在一个目标文件中

其实对于我们来说,日志为了简便起见,一般直接使用类型3就比较合适了,把日志文件写到自己需要的文件中。

为了示例error_log()函数的简单使用,我们个例子说明。假设我们数据库抽象类使用PEAR::DB类,现在我想在程序中记录我们的程序是否有执行错误。那么我们使用error_log()来记录我们那些SQL语句执行错误或者失败了,至少我们的PEAR::DB类提供了 DB::isError() 方法来获取某个执行结果对象是否有错误,那么我们就能够旁断是否执行某条SQL出现了错误,再来考虑是否记录日志,同时对象有个userinfo的属性,该属性记录了错误的SQL语句,那么我们可以构造这样一个函数:

function logError($object)
{
 if(DB::isError($object))
 {
  error_log(date("[Y-m-d H:i:s]")." -[".$_SERVER['REQUEST_URI']."] :".$object -> userinfo."\n", 3, "/tmp/php_sql_err.log");
  return true;
 }
 return false;
}

这个函数就是能够记录发现了错误SQL的地方,那么自动会把时间,当前页面,和错误的SQL语句信息记录到 /tmp/php_sql_err.log 文件当中,那么,当我们在调试程序的时候,发现数据提取不正确或者没有数据提取的时候,那么我们完全可以查看 /tmp/php_sql_err.log 文件来查看我们的错误页面和错误的SQL语句。

当然,我们必须在我们执行SQL查询的程序中去使用这个函数,比如我们执行一个编写一个提取新闻信息的函数:

function getNewsContent($news_id, $field="")
{
 global $db;
 $result = $db->getRow("SELECT $field FROM news WHERE news_id = '$news_id'");
 if (logError($result))
 {
  return false;
 }
 return $result;
}

我们在里面判断SQL是否错误,如果错误了则返回false,然后我们就可以查看日志一下,看我们的函数运行是否如我们预期想象的一样。
我们执行: tail /tmp/php_sql_err.log
能看到类似于这样的信息:

[2006-01-12 11:44:34] -[/news_list.php?news_id=1] :SELECT  FROM news WHERE news_id = '1' [nativecode=1064 ** You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version fo
r the right syntax to use near 'FROM news WHERE news_id = '1']

大致是因为我们select的时候,没有把需要提取的字段名写进去,那么我们就可以检查news_list.php文件,减产 getNewsContent ()函数法向没有传递$field参数进去,导致SQL执行错误。所以error_log()函数就帮助检查我们的SQL写的是否正确,或者是参数没有传递正确,这样大大的减轻了开发负担,想但于了对我们的程序进行了单元测试。

当然,你也可以利用error_log()函数做更多记录错误日志,方便PHP开发,这个全是由自己决定。


本次工作中使用它来记简单的log日志
<code>
            $address    = post('address');
            $group_add  = explode(',',$address);

            $url   ="/usr/local/apache/eyoung/tmp/maillog_".date("Y-m-d").".log";

            foreach($group_add as $value)
            {
                    /** {{{ modify by muzhaoyang -2006.12.13- 记log
                      *  已空格分隔数据,记录的数据为写文本时间 拉票人ID 选手ID 发信地址
                      */
                      $logstr=date("H:i:s")." ".$uid." ".$star_uid." ".$value."\n";
                      error_log($logstr,3,$url);
                    //}}}
             }

</code>

PHP 相关文章推荐
fleaphp crud操作之findByField函数的使用方法
Apr 23 PHP
如何突破PHP程序员的技术瓶颈分析
Jul 17 PHP
PHP获取用户的浏览器与操作系统信息的代码
Sep 04 PHP
解析yii数据库的增删查改
Jun 20 PHP
php fsockopen解决办法 php实现多线程
Jan 20 PHP
php使用正则过滤js脚本代码实例
May 10 PHP
PHP实现的增强性mhash函数
May 27 PHP
php版微信公众平台入门教程之开发者认证的方法
Sep 26 PHP
Zend Framework使用Zend_Loader组件动态加载文件和类用法详解
Dec 09 PHP
php+jQuery实现的三级导航栏下拉菜单显示效果
Aug 10 PHP
PHP验证类的封装与使用方法详解
Jan 10 PHP
Laravel 数据库加密及数据库表前缀配置方法
Oct 10 PHP
PHP Document 代码注释规范
Apr 13 #PHP
php pcntl_fork和pcntl_fork 的用法
Apr 13 #PHP
sourcesafe管理phpproj文件的补充说明(downmoon)
Apr 11 #PHP
php 动态执行带有参数的类方法
Apr 10 #PHP
PHP获取类中常量,属性,及方法列表的方法
Apr 09 #PHP
php 随机生成10位字符代码
Mar 26 #PHP
php SQL之where语句生成器
Mar 24 #PHP
You might like
PHP的一个完整SMTP类(解决邮件服务器需要验证时的问题)
2006/10/09 PHP
php数组函数序列之array_flip() 将数组键名与值对调
2011/11/07 PHP
php内存缓存实现方法
2015/01/24 PHP
php取得字符串首字母的方法
2015/03/25 PHP
thinkphp分页集成实例
2017/07/24 PHP
php闭包中使用use声明变量的作用域实例分析
2018/08/09 PHP
PHP中localeconv()函数的用法
2019/03/26 PHP
JQuery 插件制作实践 xMarquee插件V1.0
2010/04/02 Javascript
基于jsTree的无限级树JSON数据的转换代码
2010/07/27 Javascript
Firefox中autocomplete=&quot;off&quot; 设置不起作用Bug的解决方法
2011/03/25 Javascript
JS Range HTML文档/文字内容选中、库及应用介绍
2011/05/12 Javascript
关于event.cancelBubble和event.stopPropagation()的区别介绍
2011/12/11 Javascript
html+css+js实现xp window界面及有关功能
2013/03/26 Javascript
jquery左右滚动焦点图banner图片鼠标经过显示上下页按钮
2013/10/11 Javascript
js之事件冒泡和事件捕获详细介绍
2013/10/28 Javascript
javascript break指定标签打破多层循环示例
2014/01/20 Javascript
JS 使用for循环遍历子节点查找元素
2014/09/06 Javascript
Bootstrap 粘页脚效果
2016/03/28 Javascript
javascript基于原型链的继承及call和apply函数用法分析
2016/12/15 Javascript
如何使用JS在HTML中自定义字符串格式化
2017/07/20 Javascript
Vue中v-show添加表达式的问题(判断是否显示)
2018/03/26 Javascript
深入理解Vue父子组件生命周期执行顺序及钩子函数
2018/08/12 Javascript
微信小程序之onLaunch与onload异步问题详解
2019/03/28 Javascript
JS删除数组指定值常用方法详解
2020/06/04 Javascript
vue项目,代码提交至码云,iconfont的用法说明
2020/07/30 Javascript
在Vue里如何把网页的数据导出到Excel的方法
2020/09/30 Javascript
jQuery实现简单轮播图效果
2020/12/27 jQuery
django实现登录时候输入密码错误5次锁定用户十分钟
2017/11/05 Python
浅谈用Python实现一个大数据搜索引擎
2017/11/28 Python
在Python中合并字典模块ChainMap的隐藏坑【推荐】
2019/06/27 Python
利用python+request通过接口实现人员通行记录上传功能
2021/01/13 Python
信息技术毕业生自荐信范文
2014/03/13 职场文书
二手车交易协议书标准版
2014/11/16 职场文书
jquery插件实现悬浮的菜单
2021/04/24 jQuery
Python实战之实现康威生命游戏
2021/04/26 Python
MySQL sql模式设置引起的问题
2022/05/15 MySQL