$Logger-> ('message', CONSTANT); function.
* Shortcut You can use the shortcut like this: $Logger->info('Message to ');
* Description
*
*
* PEAR_LOG_EMERG
* emerg()
* System is unusable
*
* PEAR_LOG_ALERT
* alert()
* Immediate action required
*
* PEAR_LOG_CRIT
* crit()
* Critical conditions
*
* PEAR_LOG_ERR
* err()
* Error conditions
*
* PEAR_LOG_WARNING
* warning()
* Warning conditions
*
* PEAR_LOG_NOTICE
* notice()
* Normal but significant
*
* PEAR_LOG_INFO
* info()
* Informational
*
* PEAR_LOG_DEBUG
* debug()
* Debug-level messages
* @author Alexandre Quessy
*/
define('WGRAPHE_ERROR_DIE', PEAR_LOG_ALERT); /* dies & show */
define('WGRAPHE_ERROR_DEBUG', PEAR_LOG_DEBUG); /* debug */
define('WGRAPHE_ERROR_NOTICE', PEAR_LOG_NOTICE); /* debug & show */
define('WGRAPHE_ERROR_INFO', PEAR_LOG_INFO); /* shows */
/**
* Gestionnaires d'erreurs PEAR et PHP. Ces fonctions seront appelees en cas d'erreurs.
*
* Pour tester ces error handlers:
* PEAR::raiseError('This is an information message.', PEAR_LOG_INFO);
* PEAR::raiseError('Test object error.', PEAR_LOG_INFO);
* @package wikigraphe_core
*/
class ErrorHandler {
/** @var array Error message to be shown */
var $messages = array();
/** @var array String of variable dump */
var $list_of_debugs = array();
/** @array boolean */
var $logging_enabled = FALSE;
/** @var object PEAR/Log */
var $logger;
/** @var boolean Debug mode */
var $debug_mode = FALSE;
/**
* Etabli les gestionnaires d'erreurs PEAR et PHP.
*
* Ne peut pas ere appele de facon statique!
* @see ErrorHandler::addMessage()
* @todo Enable the error logger when we can get a DB using DB_DataObject::getDatabaseConnection()
*/
function ErrorHandler() {
/* Configure les error handlers pour PHP et PEAR */
set_error_handler(array($this, 'php'));
PEAR::setErrorHandling(PEAR_ERROR_CALLBACK, array($this, 'pear'));
//$this->logger =& $this->loggerFactory();
//$this->logging_enabled = TRUE;
}
/**
* Handler for PHP errors : will send convert it to a PEAR error that will be handled by the PEAR errors handler
* If you want to test it:
* trigger_error('This is an information message.', E_USER_NOTICE);
*
*/
function php($code, $message, $file, $line) {
/* Map the PHP error to a Log priority. */
switch ($code) {
/* Fatal PHP errors cannot be handled. */
case E_WARNING:
case E_USER_WARNING:
$priority = PEAR_LOG_WARNING;
break;
case E_NOTICE:
case E_USER_NOTICE:
$priority = PEAR_LOG_NOTICE;
break;
case E_ERROR:
case E_USER_ERROR:
$priority = PEAR_LOG_ERR;
break;
default:
$priority = PEAR_LOG_INFO;
}
/* Logs the error in the with the $Logger object (instance of PEAR/Log) */
//$logger-> ('PHP: ' . $message . ' in ' . $file . ' at line ' . $line, $priority);
$pear_message = 'PHP: ' . $message . ' in ' . $file . ' at line ' . $line;
// Then calls the function pear() below
PEAR::raiseError($pear_message, $priority);
//debug(array('Erreur PHP'=>array($code, $message, $file, $line)));
}
/**
* This is the PEAR error handler. This function is called when there is a PEAR error.
*
* @param object $Error Objet d'erreur PEAR
*/
function pear($Error) {
$message = $Error->getMessage();
/*
* I add this, but it might give some risky debug infos. It is just for the log file
*/
$backtrace = $Error->getBacktrace();
$message .= print_r($backtrace, TRUE);
/*
if (@empty($backtrace['userinfo'])) {
$message .= "";
} else {
$message .= " " . $backtrace['userinfo'];
}
*/
/**
* Ajoute les infos pour le deboggage pour le log file
*/
if (substr($message, 0, 4) != 'PHP:') { /* ligne importante: sinon on verrait le mauvais num�o de ligne quand c'est une erreur PHP */
if (!empty($Error->backtrace[1]['file'])) {
$message .= ' (' . $Error->backtrace[1]['file'];
if (!empty($Error->backtrace[1]['line'])) {
$message .= ' at line ' . $Error->backtrace[1]['line'];
}
$message .= ')';
}
}
$code = $Error->code;
switch ($code) {
/* Erreurs importantes. */
case PEAR_LOG_EMERG:
case PEAR_LOG_ALERT:
case PEAR_LOG_CRIT:
case PEAR_LOG_WARNING:
$show = TRUE;
$log = TRUE;
$die = TRUE;
break;
/* Erreurs ? */
case PEAR_LOG_ERR:
$show = TRUE;
$log = TRUE;
$die = FALSE;
break;
/* Not�s dans le fichier de log pour d�ogage. */
case PEAR_LOG_DEBUG:
$show = FALSE;
$log = TRUE;
$die = FALSE;
break;
/* Not�s dans le log, elles sont aussi montr�s �l'usager */
case PEAR_LOG_NOTICE:
$show = TRUE;
$log = TRUE;
$die = FALSE;
break;
/* Je montre ces erreurs �l'usager. */
case PEAR_LOG_INFO:
default:
$show = TRUE;
$log = FALSE;
$die = FALSE;
break;
}
/* Outputs the error message or die, according to the error level. */
if ($log) {
if ($this->logging_enabled) {
$this->logger->log($message, $code);
}
$this->dump(array('Error'=>array('code'=>$code, 'message'=>$message)));
}
if ($die && !$show) {
die();
} elseif ($die && $show) {
die($Error->getMessage());
} elseif ($show) {
$this->addMessage($Error->getMessage());
}
if ($this->isDebugMode()) {
$this->dump($Error->userinfo);
}
}
/**
* Met le mode verbose a on ou off
* @param bool $val
*/
function setDebugMode($val) {
$this->debug_mode = $val;
}
/** @return bool Are we in debug mode ? */
function isDebugMode() {
return $this->debug_mode;
}
/**
* Ajoute quelque chose dans la liste des variables a debugger
*/
function dump($var) {
if ($this->isDebugMode()) {
ob_start();
Var_Dump::display($var);
$result = ob_get_clean();
$this->list_of_debugs[] = $result;
}
}
/** Error logging
* @see Log::log()
*/
function log($message ) {
$this->logger->log($message);
}
/**
* Affiche un message �l'usager.
* @param string|null $mess Message
*/
function addMessage($mess) {
$i;
if (!isset($i)) {
$i = 0;
} else {
$i++;
}
if (!is_null($mess)) {
/* Le 'k' de la cl�est pour �iter des name clashes quand on fait un array_merge par la suite. */
$this->messages["k$i"] = $mess;
}
}
/**
* @return All the error messages as an array
*/
function getMessages() {
if (@is_object(@$this)) {
//return array_merge($this->user_messages, $this->messages);
return $this->messages;
}
}
/**
* PEAR/Log factory that returns a PEAR/Log object with a configuration for a sql logging.
*
* Then, you just need to do this to an error:
* $GLOBALS['Logger']-> ('Message', PEAR_LOG_NOTICE);
* To test it, do something like this :
* for ($i = 0; $i < 10; $i++) {
* $error->log("Log entry $i");
* }
* @param string $file_path The error file. Has to be chmod 600, chown nobody, or
* chmod 666.
* @static
* @return object $Logger a PEAR/Log instance meant to be global.
* @link http://www.indelible.org/pear/Log/guide.php The PEAR/Log online documentation.
* @todo Change log method to db
* mode = 0600
UNIX rights on the file
* append = TRUE
Should the strings be added at the end of the file ?
* eol = '\n'
UNIX line endings.
* timeFormat = '%a %Y-%m-%d %H:%M'
ISO format for strftime() PHP function
*/
function &loggerFactory(&$pear_db) {
$configuration = array('db' => &$pear_db);
//$file_path = $dir_path . date('Y-m') . '_fliki.error .txt';
return Log::factory('sql', WGRAPHE_LOG_TABLENAME, 'ident', $configuration);
}
}
?>