php函数error_log

        开发过程中,对可能出错的代码做异常捕获、打印日志,有利于分析系统中的bug,暂时先不说PHP的异常捕获,先说说PHP日志打印吧。

        PHP有一函数error_log,猛一看是打印日志的,到底是不是呢,接下来咱分析下。

函数原型:

 

 

参数说明:

 

$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附加头信息,实例:error_log("there is ab bug",1,"[email protected]","From: [email protected]");

     2,不常用,不说了;

     3,$message写入$destination指定的文件中,实例:error_log("there is ab bug\r\n",3,"D:/php.log");

 

     error_log,顾名思义是错误日志打印,其实错误这个词有点儿狭隘了,这个函数实际上是,你想打什么东西都可以,由开发者自己决定,实际上这个函数就是个写文件的函数。大家知道日志文件是多个线程或进程共享的资源,打日志呢就不能受共享资源写冲突而丢失了日志,不然日志都不准确,还怎么进一步分析系统情况呢,打日志不准确就犹如拿一把不准确的尺子量长度。那么error_log到底能完成打日志的功能不,有待测试,看测试代码。

    用Jmeter做下并发测试,模拟600个并发用户,循环请求5次,总请求数是3000,(假设web服务器无瓶颈问题)php.log文件中应该有3000行的测试,到底能不能达到预期呢,打开php.log查下就知道了,一看,没有3000行,于是就得出了一个结论:error_log不靠谱,是的,error_log函数没有做并发处理,在高并发情况下会丢掉日志,所以这个函数没多大用,不用也罢。不用这个函数,那打日志怎么办呢?请不要留恋error_log了,还记得flock不,自己封装一个呗;或者用apache的开源项目log4php吧。

 

注:error_log函数使用的前提是设置php.ini中log_error=On

你可能感兴趣的:(PHP函数)