Want to log script activity in your Web application, but haveno clue where to begin? Take our handy tour of PHP's logging functions,and find out how simple it really is.
If the thought of rolling your own code doesn't appeal to you, you can also use PHP's built-in error_log() function, which logs data both to a file and elsewhere. The error_log() function needs a minimum of two arguments: the error message to be logged, and an integer indicating where the message should be sent. There are three possible integer values in PHP 4.x:
0 - send the message to the system logger ("syslogd" on *NIX, and the Event Log on Windows NT);
1 - send the message to the specified email address;
3 - send the message to the specified file;
Here's a trivial example which demonstrates how this works:
<?php
// set a variable
$temp = 101.6;
// test it and log an error
// this will only work if
// you have "log_errors" and "error_log" set in your php.ini file if
($temp > 98.6) {
error_log("Body temperature above normal.", 0);
}
?>
Now, if you look at the system log file after running the
script, you'll see something like this:
[28-Feb-2002 15:50:49] Body temperature above normal.
You can also write the error message to a file,
<?php
// set a variable
$temp = 101.6;
// test it and log an error
if ($temp > 98.6)
{
error_log("Body temperature above normal.", 3, "a.out");
}
?>
or send it out as email.
<?php
// set a variable
$temp = 101.6;
// test it and log an error
if ($temp > 98.6)
{
error_log("Body temperature above normal.", 1,
"administrator@this.body.com"); }
?>
It's possible to combine this error logging facility with a
custom error handler to ensure that all script errors get logged to a file. Here's an example which demonstrates this:
<?php
// custom handler
function eh($type, $msg, $file, $line)
{
// log all errors
error_log("$msg (error type $type)", 0);
// if fatal error, die()
if ($type == E_USER_ERROR)
{
die($msg);
}
}
// report all errors
error_reporting(E_ALL);
// define custom handler
set_error_handler("eh");
// let's now write some bad code
// this will trigger a warning, since the file doesn't exist
include("common.php"); ?>
And here's the output that gets logged to the system log
file:
[28-Feb-2002 16:15:06] Failed opening 'common.php' for inclusion
(include_path='.;') (error type 2)