|
开发过程中,对可能出错的代码做异常捕获、打印日志,有利于分析系统中的bug,暂时先不说PHP的异常捕获,先说说PHP日志打印吧。
PHP有一函数error_log,猛一看是打印日志的,到底是不是呢,接下来咱分析下。
函数原型:
<?php
error_log ($message, $message_type = null, $destination = null, $extra_headers = null);
?>
参数说明:
$message //日志内容,你懂得
$message_type //日志类型
$destination //日志内容输出目标
$extra_headers //附加头内容
功能说明:
以$message_type参数为切入点来说明吧。$message_type有4个可选值,在强类型语言中的话应该叫枚举值,只是PHP中没有枚举的概念。$message_type可选值如下。
0,默认值,$message写入php.ini配置error_log指定的文件中,实例:error_log("there is ab bug");
1,一般的用法就是将日志内容发到邮箱,$destination就是邮件地址,$extra_header附加头信息,实例:[size=1em]error_log("there is ab bug[size=1em]",[size=1em]1,"someone@example.com","From: webmaster@example.com");
[size=1em] 2,不常用,不说了;
[size=1em] 3,$message写入$destination指定的文件中,实例:[size=1em][size=1em]error_log("there is ab bug[size=1em][size=1em]\r\n",3,"D:/php.log");
[size=1em][size=1em] error_log,顾名思义是错误日志打印,其实错误这个词有点儿狭隘了,这个函数实际上是,你想打什么东西都可以,由开发者自己决定,实际上这个函数就是个写文件的函数。大家知道日志文件是多个线程或进程共享的资源,打日志呢就不能受共享资源写冲突而丢失了日志,不然日志都不准确,还怎么进一步分析系统情况呢,打日志不准确就犹如拿一把不准确的尺子量长度。那么error_log到底能完成打日志的功能不,有待测试,看测试代码。
<?php
error_log("测试\r\n",3,"D:/php.log");
?>
[size=1em][size=1em][size=1em] 用Jmeter做下并发测试,模拟600个并发用户,循环请求5次,总请求数是3000,(假设web服务器无瓶颈问题)php.log文件中应该有3000行的[size=1em]测试,到底能不能达到预期呢,打开php.log查下就知道了,一看,没有3000行,于是就得出了一个结论:error_log不靠谱,是的,error_log函数没有做并发处理,在高并发情况下会丢掉日志,所以这个函数没多大用,不用也罢。不用这个函数,那打日志怎么办呢?请不要留恋error_log了,还记得flock不,自己封装一个呗;或者用apache的开源项目log4php吧。
[size=1em][size=1em][size=1em]注:error_log函数使用的前提是设置php.ini中log_error=On |
|
|