I don't don't of any tool that will do that automatically for you ; but it is not hard to develop, I think... Still, I admit, it will take you some time :-(
Just to throw in a few notes, the best solution that comes to my mind to log the errors is :
- register your own error handler with
set_error_handler
- code the function, so that it logs errors + GET/POST data
- maybe that could/would/should be done in some kind of database, or structured file (an SQLite Database, maybe : light, fast, easy to use, doesn't depend on an external DB server, ...), and not just plain files ; would be easier to deal with later on.
- develop the "reporting" application...
- That's the thing that will take some time, though, as you said...
Using the example that's given on the manual page, something like this would probably do : first, declare your error handling function :
function myErrorHandler($errno, $errstr, $errfile, $errline)
{
$str = '';
switch ($errno) {
case E_USER_ERROR:
$str .= "<b>My ERROR</b> [$errno] $errstr<br />\n";
$str .= " Fatal error on line $errline in file $errfile";
$str .= ", PHP " . PHP_VERSION . " (" . PHP_OS . ")<br />\n";
break;
case E_USER_WARNING:
$str .= "<b>My WARNING</b> [$errno] $errstr<br />\n";
break;
case E_USER_NOTICE:
$str .= "<b>My NOTICE</b> [$errno] $errstr<br />\n";
break;
default:
$str .= "Unknown error type: [$errno] $errstr<br />\n";
break;
}
$str .= print_r($_GET, true);
$str .= "\n";
file_put_contents(dirname(__FILE__) . '/log.txt', $str, FILE_APPEND);
/* Don't execute PHP internal error handler */
return true;
}
It gets informations of the error, prepares some specific error messages that depend on the error type, and put all that and a dump of $_GET
to a file.
(Of course, your webserver must be able to create / write to that file)
Then, you register that handler :
$old_error_handler = set_error_handler("myErrorHandler");
And, finally, just to test, you trigger some errors :
trigger_error("test of E_USER_ERROR", E_USER_ERROR);
trigger_error("test of E_USER_WARNING", E_USER_WARNING);
trigger_error("test of E_USER_NOTICE", E_USER_NOTICE);
Now, provided you call the page with something like this : http://tests/temp/temp.php?a=10&test=glop&hello=world
; you will get an error log containing this :
$ cat log.txt
<b>My ERROR</b> [256] test of E_USER_ERROR<br />
Fatal error on line 34 in file /home/squale/developpement/tests/temp/temp.php, PHP 5.3.0RC4 (Linux)<br />
Array
(
[a] => 10
[test] => glop
[hello] => world
)
<b>My WARNING</b> [512] test of E_USER_WARNING<br />
Array
(
[a] => 10
[test] => glop
[hello] => world
)
<b>My NOTICE</b> [1024] test of E_USER_NOTICE<br />
Array
(
[a] => 10
[test] => glop
[hello] => world
)
In this case, it is quite an ugly mess... But you probably see the point ; now, up to you to build upon this to get precisely what you want ;-)
Of course, now, you also have to develop the reporting interface (user-friendly, fast, usable, and all that...) ; this will probably be the longest part to put in place :-(
And, unfortunatly, I do not know any tool that could help you...
(Maybe, if you start developping something, it could be released as open source ? That would probably prove useful to others ;-) I might be interested for some projects, and I am sure I'm not the one ;-) )
Still, have fun !