从PHP/apache服务器代码自动收集bug

从PHP/apache服务器代码自动收集bug,php,apache,bug-tracking,Php,Apache,Bug Tracking,从apache错误日志中找出一些东西是很痛苦的。有没有人能找到更好的错误收集机制。类似于“”中描述的内容,但适用于PHP/apache webapp 更具体地说,一些机制可以将PHP抛出的错误挂接到一些bug跟踪软件上。可能指向一些库/代码,这些库/代码捕获错误/警告并收集可以输入bug跟踪软件的数据。具有以下附加功能: 识别重复的错误 如果一个bug导致多个错误消息,则应将其捕获为一个bug 我们在服务器上使用Zend平台。它不是免费的,但效果很好,能满足你的大部分要求 它允许您定义事件和设

从apache错误日志中找出一些东西是很痛苦的。有没有人能找到更好的错误收集机制。类似于“”中描述的内容,但适用于PHP/apache webapp

更具体地说,一些机制可以将PHP抛出的错误挂接到一些bug跟踪软件上。可能指向一些库/代码,这些库/代码捕获错误/警告并收集可以输入bug跟踪软件的数据。具有以下附加功能:

  • 识别重复的错误
  • 如果一个bug导致多个错误消息,则应将其捕获为一个bug

我们在服务器上使用Zend平台。它不是免费的,但效果很好,能满足你的大部分要求

它允许您定义事件和设置触发器。触发时,将记录应用程序的整个状态。您可以浏览和筛选事件类型的图表或列表、将事件标记为重复事件、查看源等


最棒的是:因为整个事件都是捕获的,所以只需单击一下就可以调试事件。应用程序的状态(代码、会话、变量、cookie,甚至上传的文件)被发送到Eclipse并暂停。然后,您可以逐步查看代码,以查看发生错误时应用程序的确切状态。对于根本原因分析非常有用。如果需要,可以在开发服务器上重播错误,这样就不会干扰生产。

我们在服务器上使用Zend平台。它不是免费的,但效果很好,能满足你的大部分要求

它允许您定义事件和设置触发器。触发时,将记录应用程序的整个状态。您可以浏览和筛选事件类型的图表或列表、将事件标记为重复事件、查看源等


最棒的是:因为整个事件都是捕获的,所以只需单击一下就可以调试事件。应用程序的状态(代码、会话、变量、cookie,甚至上传的文件)被发送到Eclipse并暂停。然后,您可以逐步查看代码,以查看发生错误时应用程序的确切状态。对于根本原因分析非常有用。如果需要,可以在开发服务器上重播错误,这样就不会干扰生产。

您可以指定自己的自定义PHP错误处理程序。下面是一个简单的例子:

function log_error_handler($errno, $str, $file, $line)
{
    switch($errno) {
        case E_USER_ERROR:
            add_log("PHP Error", "Error $errno on line $line in $file: $str", "fatal");
            exit(1);
            break;

        case E_USER_WARNING:
            add_log("PHP Warning", "Warning $errno on line $line in $file: $str", "warning");
            break;

        case E_USER_NOTICE:
            add_log("PHP Notice", "Notice $errno on line $line in $file: $str", "note");
            break;

        default:
//uncomment this next line to catch
//            add_log("PHP", "Unknown error $errno on line $line in $file: $str", "note");
            break;
    }
}
function add_log($code, $message, $type = 'message', $program = null ){
     //do something like email the admin or enter in the data in to the bug tracking software db
}

// ### function to log php errors ####
set_error_handler("log_error_handler");

您可以指定自己的自定义PHP错误处理程序。下面是一个简单的例子:

function log_error_handler($errno, $str, $file, $line)
{
    switch($errno) {
        case E_USER_ERROR:
            add_log("PHP Error", "Error $errno on line $line in $file: $str", "fatal");
            exit(1);
            break;

        case E_USER_WARNING:
            add_log("PHP Warning", "Warning $errno on line $line in $file: $str", "warning");
            break;

        case E_USER_NOTICE:
            add_log("PHP Notice", "Notice $errno on line $line in $file: $str", "note");
            break;

        default:
//uncomment this next line to catch
//            add_log("PHP", "Unknown error $errno on line $line in $file: $str", "note");
            break;
    }
}
function add_log($code, $message, $type = 'message', $program = null ){
     //do something like email the admin or enter in the data in to the bug tracking software db
}

// ### function to log php errors ####
set_error_handler("log_error_handler");

忽略错误发生的时间,并获取错误消息的md5哈希。 检查MD5哈希是否已存在于错误数据库中。 如果没有,请添加它。 如果是的话,也许你想加上这次发生的日期

  • 如果一个bug导致多个错误消息,则应将其捕获为一个bug
这很棘手,除非您对
error\u log()
函数的使用非常熟练。 你可以就一项公约达成一致,例如:

error_log('ename:'.$error_name.' emessage:'.$e->toString());

这样,您就可以使用相同的
ename
emessage
的MD5来解析和分组任何错误,忽略错误发生的时间,并获取错误消息的MD5哈希值。 检查MD5哈希是否已存在于错误数据库中。 如果没有,请添加它。 如果是的话,也许你想加上这次发生的日期

  • 如果一个bug导致多个错误消息,则应将其捕获为一个bug
这很棘手,除非您对
error\u log()
函数的使用非常熟练。 你可以就一项公约达成一致,例如:

error_log('ename:'.$error_name.' emessage:'.$e->toString());
这样,您就可以使用相同的
ename
emessage
的MD5来解析和分组任何错误