Recent Articles
- Watermark Images with Other Images and Text on the Fly, Started by shabbir in PHP
- Securing basic PHP flaws for newbies [Part 1], Started by Deadly Ghos7 in PHP
- PHP Code Optimization: Do's and Don'ts, Started by hurricanesoftwares in PHP
- Password Creator: using bitwise operations, Started by extraweb in PHP
- Google Image Leecher - Php Code, Started by o0darkEvil0o in PHP
Similar Articles
- PHP On-The-Fly!, Started by Kings in PHP
- Track your visitors, using PHP, Started by Kings in PHP
- Simple Logging with PHP, Started by pradeep in PHP
- Installing & Using PEAR, Started by pradeep in PHP
Like the error_log() function, the PEAR Log class allows logging to a variety of different destinations - system logger, text file, email address, database and even MCAL. Here's an example demonstrating basic usage:
Code: PHP
<?php
// include class
require("Log.php");
// create Log object
$l = &Log::singleton("file", "my.log");
// test it
$v = "Logging with PHP using PEAR";
if (!is_numeric($v)) { $l->log("Non-numeric variable was found",PEAR_LOG_WARNING); }
$a = array("chocolate", "strawberry", "peach");
if (!in_array('fish', $a)) { $l->log("No fish found", PEAR_LOG_ERR);}
$conn = @mysql_connect("go4expert", "user", "password");
if (!$conn) { $l->log("Could not connect to database on go4expert", PEAR_LOG_CRIT);
}
?>
Code: PHP
// include class
include("Log.php");
Once that's done, a new Log object can be created. This object constructor requires, as its first parameter, a string indicating the kind of log to open - current valid values are 'console', 'syslog', 'sql', 'file', and 'mcal'. Depending on the log type, additional data may be provided - the name of the file to use in case of a file logger, for example.
Code: PHP
// create Log object
$l = &Log::singleton("file", "my.log");
The Log class internally defines eight priority levels for logging - here's the list, culled directly from the source code of the class:
Code: PHP
$priorities = array(
PEAR_LOG_EMERG => 'emergency',
PEAR_LOG_ALERT => 'alert',
PEAR_LOG_CRIT => 'critical',
PEAR_LOG_ERR => 'error',
PEAR_LOG_WARNING => 'warning',
PEAR_LOG_NOTICE => 'notice',
PEAR_LOG_INFO => 'info',
PEAR_LOG_DEBUG => 'debug'
);
Each log message that you send to the logger can be flagged with a specific priority, and the logger can be set up to log only those messages matching or exceeding a specific priority level (by default, all messages are logged). This can be clearly seen from the test code below, in which each message to the logger includes a priority level:
Code: PHP
$v = "Mary had a little lamb";
if (!is_numeric($v)) { $l->log("Non-numeric variable encountered",
PEAR_LOG_WARNING); }
$a = array("chocolate", "strawberry", "peach");
if (!in_array('fish', $a)) { $l->log("No fish available", PEAR_LOG_ERR);
}
$conn = @mysql_connect("localhost", "joe", "pass");
if (!$conn) { $l->log("Could not connect to database", PEAR_LOG_CRIT);
}
Here's what the log file looks like:
Code:
Nov 26 06:47:15 [warning] Non-numeric variable was found Nov 26 06:47:15 [error] No fish found Nov 26 06:47:17 [critical] Could not connect to database on go4expert
Code: PHP
<?php
// include class
include("Log.php");
// create Log object
$l = &Log::singleton("file", "my.log", NULL, array(), PEAR_LOG_ERR);
// test it
$v = "Mary had a little lamb";
if (!is_numeric($v)) { $l->log("Non-numeric variable was found",
PEAR_LOG_WARNING); }
$a = array("chocolate", "strawberry", "peach");
if (!in_array('fish', $a)) { $l->log("No fish found", PEAR_LOG_ERR);
}
$conn = @mysql_connect("go4expert", "user", "password");
if (!$conn) { $l->log("Could not connect to database on go4expert", PEAR_LOG_CRIT);
}
?>
In this case, only messages flagged as PEAR_LOG_ERR and above will be written to the specified log file.
Messages can also be sent to an SQL database,
Code: PHP
<?php
// include class
include("Log.php");
// create Log object
// second argument is table name
// fourth argument is PHP::DB compatible DSN for database access $l =
&Log::singleton("sql", "log_table", "", array('dsn' =>
'mysql://user:passwordword@go4expert/errors'));
// test it
$v = "Mary had a little lamb";
if (!is_numeric($v)) { $l->log("Non-numeric variable was found",
PEAR_LOG_WARNING); }
$a = array("chocolate", "strawberry", "peach");
if (!in_array('fish', $a)) { $l->log("No fish found", PEAR_LOG_ERR);
}
$conn = @mysql_connect("go4expert", "user", "passwordword");
if (!$conn) { $l->log("Could not connect to database on go4expert", PEAR_LOG_CRIT);
}
?>
which can then be queried to retrieve subsets of the log messages, sorted by date or priority level.
Code: SQL
mysql> SELECT * FROM log_table WHERE priority >= 4;
+----------------+-------+----------+----------------------------------+
| logtime | ident | priority | message |
+----------------+-------+----------+----------------------------------+
| 20021126074936 | | 4 | Non-numeric variable encountered |
| 20021126074936 | | 4 | Non-numeric variable encountered |
| 20021126074937 | | 4 | Non-numeric variable encountered |
+----------------+-------+----------+----------------------------------+
3 rows IN SET (0.05 sec)
Finally, log messages can also be directed to a specified email address, as in the following example:
Code: PHP
<?php
// include class
include("Log.php");
// create Log object
$l = &Log::singleton("mail", "admin@go4expert.com");
// test it
$v = "Mary had a little lamb";
if (!is_numeric($v)) { $l->log("Non-numeric variable was found",
PEAR_LOG_WARNING); }
$a = array("chocolate", "strawberry", "peach");
if (!in_array('fish', $a)) { $l->log("No fish found", PEAR_LOG_ERR);
}
$conn = @mysql_connect("go4expert", "user", "passwordword");
if (!$conn) { $l->log("Could not connect to database on go4expert", PEAR_LOG_CRIT);
}
?>
You can customize the mail message by adding an array containing a custom From: and Subject: line to the object constructor, as below:
Code: PHP
<?php
// include class
include("Log.php");
// create Log object
$l = &Log::singleton("mail", "admin@go4expert.com", NULL, array('from' => 'L.
Ogger', 'subject' => 'Log message'));
// test it
$v = "Mary had a little lamb";
if (!is_numeric($v)) { $l->log("Non-numeric variable was found",
PEAR_LOG_WARNING); }
$a = array("chocolate", "strawberry", "peach");
if (!in_array('fish', $a)) { $l->log("No fish found", PEAR_LOG_ERR);
}
$conn = @mysql_connect("go4expert", "user", "password");
if (!$conn) { $l->log("Could not connect to database", PEAR_LOG_CRIT);
}
?>










Yet to provide details about himself
Linear Mode

