设为首页 - 加入收藏 - 网站地图 欢迎加QQ群 :14364084
当前位置:谭博的博客 > 编程语言 > php > 正文

php如何捕获fatal error并写入日志

时间:2013-03-15 15:17 来源:未知 标签:php如何捕获fatal error 作者:谭博 阅读:

 

register_shutdown_function,是在程序中止时执行一个函数,error_get_last是获取最后的一条错误信息。两者配合,即可捕获fatal error并写入日志

 

 

 

<?php
register_shutdown_function(a);
set_error_handler(b);

function b($error,$message,$file,$line){

	global $log;

   $log=array();
			switch($error) {
				case E_ERROR:
					$type='ERROR';
					break;
				case E_WARNING:
					$type='WARNING';
					break;
				case E_NOTICE:
					$type='NOTICE';
					break;
				default:
					$type='Unknown error type ['.$error.']';
					break;
			}
			$log[] = date('Y-m-d H:i:s', time())."\t".$type.': '.$message.' in line '.$line.' of file '.$file.', PHP '.PHP_VERSION.' ('.PHP_OS.')';
			if(function_exists('debug_backtrace')) {
				$backtrace=debug_backtrace();
				for($level=1;$level<count($backtrace);$level++) {
					$message='File: '.$backtrace[$level]['file'].' Line: '.$backtrace[$level]['line'].' Function: ';
					if(IsSet($backtrace[$level]['class']))
						$message.='(class '.$backtrace[$level]['class'].') ';
					if(IsSet($backtrace[$level]['type']))
						$message.=$backtrace[$level]['type'].' ';
					$message.=$backtrace[$level]['function'].'(';
					if(IsSet($backtrace[$level]['args'])) {
						for($argument=0;$argument<count($backtrace[$level]['args']);$argument++) {
							if($argument>0)
								$message.=', ';
							$message.=serialize($backtrace[$level]['args'][$argument]);
						}
					}
					$message.=')';
					$log[]=$message;
					
				}
			}


			
}



  function a(){
	global $log;
	 

	 if ($e = error_get_last())
	 {            
		  $log[] = $e['message'] . " in " . $e['file'] . ' line ' . $e['line'];
	 }

	print_r($log);

	//还可以干一些其他的事情哦,比方说发邮件
 }


$a =  $_GET['ss'];
$a = new b();


   
	  
 

 

 

关注微信公众号

微信扫一扫,打赏我

热评文章
    内容不错,支持一下
    评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)