如何将自定义变量放入 PHP 错误日志
How to put custom variables into PHP error logs
我想在错误日志中包含某些服务器信息。有没有办法强制 PHP 将 $_SERVER['SERVER_ADDR']
(或任何其他变量)包含到日志条目中?因此,例如日志将是:
[08-Apr-2015 16:58:33] 125.60.12.1 PHP Fatal error: Call to undefined
function a() in /index.php on line 5
而不是
[08-Apr-2015 16:58:33] PHP Fatal error: Call to undefined function
a() in /index.php on line 5
错误处理程序
获取更多错误信息的最佳方式是创建您自己的错误处理程序
此示例输出标准错误信息以及当时使用的所有变量。
此特定函数将包含敏感信息,因此我们添加了一行来删除密码等内容。
$dev=true; //dev pc
function error_function($err_level,$err_msg,$err_file,$err_line,$err_context)
{
global $dev;
$err_stg="<br />
############################<br />
<b>Error level:</b> $err_level<br />
<b>Message:</b> $err_msg<br />
<b>File:</b> $err_file<br />
<b>On line:</b> $err_line<br />
############################<br /><br />";
//convert array to string
$err_stg.=serialize($err_context);
//remove sensitive information
$pos=strpos($err_stg,'MYSQL_PASSWORD');
if($pos){ $err_stg=substr($err_stg,0,$pos).substr($err_stg,$pos+40); }
if($dev) //if on dev pc echo error
{
echo $err_stg;
}
else //if live on site save error to file
{
error_log($err_stg,3,"error_file_secret.html");
}
}
将此函数设置为错误处理程序
set_error_handler("error_function",E_ALL);
根据您的需要自定义此功能。
我想在错误日志中包含某些服务器信息。有没有办法强制 PHP 将 $_SERVER['SERVER_ADDR']
(或任何其他变量)包含到日志条目中?因此,例如日志将是:
[08-Apr-2015 16:58:33] 125.60.12.1 PHP Fatal error: Call to undefined function a() in /index.php on line 5
而不是
[08-Apr-2015 16:58:33] PHP Fatal error: Call to undefined function a() in /index.php on line 5
错误处理程序
获取更多错误信息的最佳方式是创建您自己的错误处理程序
此示例输出标准错误信息以及当时使用的所有变量。
此特定函数将包含敏感信息,因此我们添加了一行来删除密码等内容。
$dev=true; //dev pc
function error_function($err_level,$err_msg,$err_file,$err_line,$err_context)
{
global $dev;
$err_stg="<br />
############################<br />
<b>Error level:</b> $err_level<br />
<b>Message:</b> $err_msg<br />
<b>File:</b> $err_file<br />
<b>On line:</b> $err_line<br />
############################<br /><br />";
//convert array to string
$err_stg.=serialize($err_context);
//remove sensitive information
$pos=strpos($err_stg,'MYSQL_PASSWORD');
if($pos){ $err_stg=substr($err_stg,0,$pos).substr($err_stg,$pos+40); }
if($dev) //if on dev pc echo error
{
echo $err_stg;
}
else //if live on site save error to file
{
error_log($err_stg,3,"error_file_secret.html");
}
}
将此函数设置为错误处理程序
set_error_handler("error_function",E_ALL);
根据您的需要自定义此功能。