如何将自定义变量放入PHP错误日志中

时间:2015-04-09 00:08:02

标签: php error-handling error-logging

我想在错误日志中包含某些服务器信息。有没有办法强制PHP将$_SERVER['SERVER_ADDR'](或任何其他变量)包含在日志条目中?例如,日志将是:

  

[08-Apr-2015 16:58:33] 125.60.12.1 PHP致命错误:调用未定义   在第5行的/index.php中运行a()

而不是

  

[08-Apr-2015 16:58:33] PHP致命错误:调用未定义的函数   第5行/index.php中的a()

1 个答案:

答案 0 :(得分:0)

错误处理程序

获取错误的更多信息的最佳方法是创建自己的错误处理程序

此示例输出标准错误信息以及当时正在使用的所有变量。

此特定功能将包含敏感信息,因此我们添加了一行来删除密码等内容。

$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);

自定义此功能以满足您的需求。