【问题标题】:How to put custom variables into PHP error logs如何将自定义变量放入 PHP 错误日志
【发布时间】:2015-04-09 00:08:02
【问题描述】:

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

[2015 年 4 月 8 日 16:58:33] 125.60.12.1 PHP 致命错误:调用未定义 第 5 行 /index.php 中的函数 a()

而不是

[2015 年 4 月 8 日 16:58:33] PHP 致命错误:调用未定义函数 第 5 行 /index.php 中的 a()

【问题讨论】:

  • 这取决于您的网络服务器。这是什么?
  • 它在centOS 5.6上运行是你的意思吗?
  • 您是否在像 Apache 这样的 Web 服务器上运行 PHP?如果有,Apache 的版本是什么?
  • 错误日志是 Web 服务器的一部分。 Apache 默认保存 IP 地址。对于其他服务器,这取决于配置。
  • 更改了标题,稍微格式化。

标签: php error-handling error-logging


【解决方案1】:

错误处理程序

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

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

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

$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 会恢复到默认的错误输出,这应该足以诊断致命错误。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-29
  • 1970-01-01
  • 1970-01-01
  • 2011-05-01
  • 1970-01-01
相关资源
最近更新 更多