You want to save program errors to a log. These errors can include everything from parser errors and files not being found to bad database queries and dropped connections.
Use error_log() to write to the error log:
1 2 3 4 |
// LDAP error if (ldap_errno($ldap)) { error_log("LDAP Error #" . ldap_errno($ldap) . ": " . ldap_error($ldap)); } |
Logging errors facilitates debugging. Smart error logging makes it easier to fix bugs. Always log information about what caused the error:
1 2 3 4 5 6 7 |
$r = mysql_query($sql); if (! $r) { $error = mysql_error(); error_log('[DB: query @'.$_SERVER['REQUEST_URI']."][$sql]: $error"); } else { // process results } |
You’re not getting all the debugging help you could be if you simply log that an error occurred without any supporting information:
1 2 3 4 5 6 |
$r = mysql_query($sql); if (! $r) { error_log("bad query"); } else { // process result } |
Another useful technique is to include the __FILE__, __LINE__, __FUNCTION__, __CLASS__, and __METHOD__ “magic” constants in your error messages:
1 |
error_log('['.__FILE__.']['.__LINE__."]: $error"); |
The __FILE__ constant is the current filename, __LINE__ is the current line number, __FUNCTION__ is the current function name, __METHOD__ is the current method name (if any), and __CLASS__ is the current class name (if any).
Starting with PHP 5.3.0, __DIR__ is the directory that __FILE__ is in and __NAMESPACE__ is the current namespace.
Starting in PHP 5.4.0, __TRAIT__ is the current trait name (if any).