Accueil > > > PHP 5 CLASSES DE REDIRECTION DES EXCEPTIONS DANS UN SYSTÈME DE LOG
PHP 5 CLASSES DE REDIRECTION DES EXCEPTIONS DANS UN SYSTÈME DE LOG
Information sur la source
Description
Voici un système permettant la redirection des exceptions dans un systeme de log. 1 classe abstraite: classe logException dérivée de la classe PHP5 Exception 2 classe dérivées classe logFileException qui redirige l'exception dans un fichier log classe logDbMysqlException qui redirige l'exception dans une table de base Mysql. Pour utiliser la source il faut créer une table de log en base comme décrit dans les premières lignes commentées de la source
Source
- <?php
- /**
- Desc:
- Classes gérant la redirection d'exceptions dans un systeme de log
- Pour utiliser le systeme de log dans Mysql
- il faut créer une table logTable dans une base Mysql de votre choix
-
- CREATE TABLE `TableLog` (
- `id` int(11) NOT NULL auto_increment,
- `time` timestamp NOT NULL default CURRENT_TIMESTAMP,
- `level` varchar(20) NOT NULL default 'WARNING',
- `msg` varchar(300) NOT NULL,
- `line` int(11) NOT NULL,
- `script` varchar(500) NOT NULL,
- `code` int(11) NOT NULL default '1',
- PRIMARY KEY (`id`)
- )
- */
- abstract class logException extends Exception
- {
- /**
- @property :string
- @desc :heure de lancement de l'exception
- */
- protected $sTime;
-
- /**
- @properties: const string
- @desc: les niveaux d'erreur
- */
- const LV_WARNING='WARNING';
- const LV_NOTICE='NOTICE';
- const LV_FATAL='FATAL';
-
- /**
- @param string $msg : message associé à l'exception
- @param int $code : code de l'exception
- @param int $level :niveau d'erreur de l'exception
- (optionel defaut FATAL)
- */
- public function __construct($msg,$code=1,$level=self::LV_WARNING)
- {
- parent::__construct($msg,$code);
- $this->sTime=date('Y-m-d H:i:s');
- $this->logIt($level,$msg);
- }
-
- /**
- @param int $level :niveau d'erreur de l'exception
- @param string $msg : message associé à l'exception
- */
- abstract protected function logIt($level,$msg);
-
- }
-
-
- /**
- Desc:
- Lancement et redirection des exceptions dans un fichier log
- */
- class logFileException extends logException
- {
- /**
- @property :boolean
- @desc :
- Flag statique indiquant si le nom du fichier log
- est horodaté ou non
- */
- protected static $bTimerNamedLog=true;
-
- /**
- @property :string
- @desc :
- Nom du fichier log sans l'extension dans lequel va être
- loguée l'exception
- */
- protected static $logName='logFile';
-
- /**
- @param string $slogName : Nom du fichier log sans extension
- @param boolean $bTimerNamedLog : Flag à true si le fichier est horodaté
- @param string $sLogExt optional defaut (.log) : Extension du fichier
- @desc :
- Methode statique définissant les propriétés du fichier log associé.
- Cette Méthode Peut être appelée sans qu'une exception de ce type soit
- levée
- */
- public static function setParam($sLogName,
- $bTimerNamedLog,$sLogExt='.log')
- {
- self::$bTimerNamedLog=$bTimerNamedLog;
- if (self::$bTimerNamedLog===true)
- self::$logName.=date('Ymd').$sLogExt;
- else self::$logName.=$sLogExt;
- }
-
- /**
- @param int $level :niveau d'erreur de l'exception
- @param string $msg : message associé à l'exception
- @desc :
- Traite l'exception dans le fichier log associé
- */
- protected function logIt($level,$msg)
- {
- if (file_exists(self::$logName))
- $fp=fopen(self::$logName,'a');
- else
- $fp=fopen(self::$logName,'w');
-
- if ($fp)
- {
- fputs($fp,strftime('%d/%m/%Y %H:%M:%S',
- strtotime($this->sTime)).' : '.
- $level.' - '.
- $msg.' - Line '.
- $this->getLine().' in '.
- $this->getFile()."\n");
- fclose($fp);
- }
- else die ('Interruption du script: Erreur durant l\'ouverture du '.
- 'fichier log');
- }
- }
-
- /**
- Desc:
- Lancement et redirection des exceptions dans une table log
- en base Mysql
- */
- class logDbMysqlException extends logException
- {
- /**
- @property : object généré par la connexion au serveur de Db
- @desc : ressource de connexion à la DB Mysql
- */
- protected static $oConnexionRes=NULL;
-
- /**
- @property : array
- @desc : configuration de la connexion à la base
- A MODIFIER
- */
- protected static $aConfigParam=array('host'=>'localhost',
- 'user'=>'root',
- 'pwd'=>'',
- 'db'=>'test',
- 'table'=>'logtable');
-
- /**
- @desc :
- Methode statique établissant la connexion si elle n'a pas été
- effectuée.
- */
- public static function link()
- {
- if (self::$oConnexionRes===NULL ||
- !mysql_ping(self::$oConnexionRes))
- {
- $msgdie='Interruption du script dans'.
- ' la methode '.__CLASS__.'::'.__FUNCTION__.
- '() sur Probleme de format détecté d\'une clé de config';
-
- if (!array_key_exists('host',self::$aConfigParam)) die ($msgdie);
- if (!array_key_exists('user',self::$aConfigParam)) die ($msgdie);
- if (!array_key_exists('pwd',self::$aConfigParam)) die ($msgdie);
- if (!array_key_exists('table',self::$aConfigParam)) die ($msgdie);
-
- self::$oConnexionRes=@mysql_connect(self::$aConfigParam['host'],
- self::$aConfigParam['user'],
- self::$aConfigParam['pwd'],
- true);
-
- $db=@mysql_select_db(self::$aConfigParam['db'],
- self::$oConnexionRes) or
- die ('Interruption du script dans'.
- ' la methode '.__CLASS__.'::'.__FUNCTION__.
- '() :1 ou pluseurs paramètres de connexion sont invalides');
- }
- }
-
- /**
- @param array $aConfig :
- Paramètres de connexion
- Exple :array('host'=>'localhost',
- 'user'=>'root',
- 'pwd'=>'',
- 'db'=>'test',
- 'table'=>'logtable');
- @desc :
- Methode statique initialisant les paramétres de connexion.
- Les paramètres peuvent être initialisées par cette methode ou
- directement en modifiant la déclaration de la propriété statique
- $aConfigParam de la classe
- */
- public static function setParam($aConfig)
- {
- if (!is_array($aConfig))
- die ('Interruption du script'.
- ' : '.__CLASS__.'::'.__FUNCTION__.'()'.
- ' paramètre array attendu');
-
- self::$aConfigParam=$aConfig;
- self::link();
-
- if (!mysql_ping(self::$oConnexionRes))
- {
- die ('Interruption du script'.
- ' : '.__CLASS__.'::'.__FUNCTION__.'() un problème '.
- 'de connexion inconnu a été identifié');
- }
-
- $queryTest='select 1 from '.self::$aConfigParam['table'].' limit 1';
-
- if (!$result=mysql_query($queryTest,self::$oConnexionRes))
- die ('Interruption du script'.
- ' Erreur dans '.__FUNCTION__.' : La table '.
- self::$aConfigParam['table'].' est inexistante en base '.
- self::$aConfigParam['db']);
- }
-
- /**
- @param int $level :niveau d'erreur de l'exception
- @param string $msg : message associé à l'exception
- @desc :
- Traite l'exception dans le fichier log associé
- */
- protected function logIt($level,$msg)
- {
- self::link();
- if (self::$oConnexionRes!==NULL)
- {
- $res=mysql_query('insert into '.self::$aConfigParam['table'].
- ' (level,time,msg,line,script,code) values'.
- '("'.$level.'","'.$this->sTime.'","'.
- mysql_real_escape_string($msg, self::$oConnexionRes).'",'.
- $this->getLine().
- ',"'.mysql_real_escape_string($this->getFile(),
- self::$oConnexionRes).
- '",'.$this->getCode().')',self::$oConnexionRes);
-
- if (!$res)
- die ('<br/>Interruption du script:'.
- ' Impossible de rediriger la '.__CLASS__.
- ' en table debase:'.
- ' erreur rencontrée :'.mysql_error());
- }
- else die ('<br/>Interruption du script sur '.__CLASS__.'::'.
- __FUNCTION__.'() : '.__CLASS__.'::setParam() doit être '.
- 'exécutée avant de lancer une '.__CLASS__);
- }
-
- /**
- @desc :
- clos la connexion
- */
- public function closeConnexion()
- {
- if (mysql_ping(self::$oConnexionRes))
- mysql_close(self::$oConnexionRes);
- }
- }
-
- /**
- Exemple utilisation des exceptions à rediriger vers un fichier log
- */
- logFileException::setParam('testLog',true);
-
- try
- {
- throw new logFileException('Exception 1 loguée vers logFile',1,
- logException::LV_WARNING);
- }
- catch(logFileException $e)
- {
- echo '<br/>'.$e->getMessage();
- try
- {
- throw new logFileException('Exception 2 loguée vers logFile',2,
- logException::LV_NOTICE);
- }
- catch(logFileException $e2)
- {
- echo '<br/>'.$e2->getMessage();
- print_r($e->getTrace());
- }
- }
-
- /**
- 2 eme Exemple :
- utilisation des exceptions à rediriger vers une db mysql
- Pour éviter de passer par setParam il faut directement modifier les
- valeurs dans la déclaration des propriétés de la classe
- logDbMysqlException
- */
- logDbMysqlException::setParam(array('host'=>'localhost',
- 'user'=>'userlogin',
- 'pwd'=>'pwdlogin',
- 'db'=>'test',
- 'table'=>'logtable'));
- try
- {
- throw new logDbMysqlException('Exception 1 loguée vers Mysql 1',1,
- logException::LV_WARNING);
- }
- catch(logDbMysqlException $e)
- {
- echo '<br/>'.$e->getMessage();
- // à Ne pas oublier si derniere exception gérée
- $e->closeConnexion();
- }
- ?>
<?php
/**
Desc:
Classes gérant la redirection d'exceptions dans un systeme de log
Pour utiliser le systeme de log dans Mysql
il faut créer une table logTable dans une base Mysql de votre choix
CREATE TABLE `TableLog` (
`id` int(11) NOT NULL auto_increment,
`time` timestamp NOT NULL default CURRENT_TIMESTAMP,
`level` varchar(20) NOT NULL default 'WARNING',
`msg` varchar(300) NOT NULL,
`line` int(11) NOT NULL,
`script` varchar(500) NOT NULL,
`code` int(11) NOT NULL default '1',
PRIMARY KEY (`id`)
)
*/
abstract class logException extends Exception
{
/**
@property :string
@desc :heure de lancement de l'exception
*/
protected $sTime;
/**
@properties: const string
@desc: les niveaux d'erreur
*/
const LV_WARNING='WARNING';
const LV_NOTICE='NOTICE';
const LV_FATAL='FATAL';
/**
@param string $msg : message associé à l'exception
@param int $code : code de l'exception
@param int $level :niveau d'erreur de l'exception
(optionel defaut FATAL)
*/
public function __construct($msg,$code=1,$level=self::LV_WARNING)
{
parent::__construct($msg,$code);
$this->sTime=date('Y-m-d H:i:s');
$this->logIt($level,$msg);
}
/**
@param int $level :niveau d'erreur de l'exception
@param string $msg : message associé à l'exception
*/
abstract protected function logIt($level,$msg);
}
/**
Desc:
Lancement et redirection des exceptions dans un fichier log
*/
class logFileException extends logException
{
/**
@property :boolean
@desc :
Flag statique indiquant si le nom du fichier log
est horodaté ou non
*/
protected static $bTimerNamedLog=true;
/**
@property :string
@desc :
Nom du fichier log sans l'extension dans lequel va être
loguée l'exception
*/
protected static $logName='logFile';
/**
@param string $slogName : Nom du fichier log sans extension
@param boolean $bTimerNamedLog : Flag à true si le fichier est horodaté
@param string $sLogExt optional defaut (.log) : Extension du fichier
@desc :
Methode statique définissant les propriétés du fichier log associé.
Cette Méthode Peut être appelée sans qu'une exception de ce type soit
levée
*/
public static function setParam($sLogName,
$bTimerNamedLog,$sLogExt='.log')
{
self::$bTimerNamedLog=$bTimerNamedLog;
if (self::$bTimerNamedLog===true)
self::$logName.=date('Ymd').$sLogExt;
else self::$logName.=$sLogExt;
}
/**
@param int $level :niveau d'erreur de l'exception
@param string $msg : message associé à l'exception
@desc :
Traite l'exception dans le fichier log associé
*/
protected function logIt($level,$msg)
{
if (file_exists(self::$logName))
$fp=fopen(self::$logName,'a');
else
$fp=fopen(self::$logName,'w');
if ($fp)
{
fputs($fp,strftime('%d/%m/%Y %H:%M:%S',
strtotime($this->sTime)).' : '.
$level.' - '.
$msg.' - Line '.
$this->getLine().' in '.
$this->getFile()."\n");
fclose($fp);
}
else die ('Interruption du script: Erreur durant l\'ouverture du '.
'fichier log');
}
}
/**
Desc:
Lancement et redirection des exceptions dans une table log
en base Mysql
*/
class logDbMysqlException extends logException
{
/**
@property : object généré par la connexion au serveur de Db
@desc : ressource de connexion à la DB Mysql
*/
protected static $oConnexionRes=NULL;
/**
@property : array
@desc : configuration de la connexion à la base
A MODIFIER
*/
protected static $aConfigParam=array('host'=>'localhost',
'user'=>'root',
'pwd'=>'',
'db'=>'test',
'table'=>'logtable');
/**
@desc :
Methode statique établissant la connexion si elle n'a pas été
effectuée.
*/
public static function link()
{
if (self::$oConnexionRes===NULL ||
!mysql_ping(self::$oConnexionRes))
{
$msgdie='Interruption du script dans'.
' la methode '.__CLASS__.'::'.__FUNCTION__.
'() sur Probleme de format détecté d\'une clé de config';
if (!array_key_exists('host',self::$aConfigParam)) die ($msgdie);
if (!array_key_exists('user',self::$aConfigParam)) die ($msgdie);
if (!array_key_exists('pwd',self::$aConfigParam)) die ($msgdie);
if (!array_key_exists('table',self::$aConfigParam)) die ($msgdie);
self::$oConnexionRes=@mysql_connect(self::$aConfigParam['host'],
self::$aConfigParam['user'],
self::$aConfigParam['pwd'],
true);
$db=@mysql_select_db(self::$aConfigParam['db'],
self::$oConnexionRes) or
die ('Interruption du script dans'.
' la methode '.__CLASS__.'::'.__FUNCTION__.
'() :1 ou pluseurs paramètres de connexion sont invalides');
}
}
/**
@param array $aConfig :
Paramètres de connexion
Exple :array('host'=>'localhost',
'user'=>'root',
'pwd'=>'',
'db'=>'test',
'table'=>'logtable');
@desc :
Methode statique initialisant les paramétres de connexion.
Les paramètres peuvent être initialisées par cette methode ou
directement en modifiant la déclaration de la propriété statique
$aConfigParam de la classe
*/
public static function setParam($aConfig)
{
if (!is_array($aConfig))
die ('Interruption du script'.
' : '.__CLASS__.'::'.__FUNCTION__.'()'.
' paramètre array attendu');
self::$aConfigParam=$aConfig;
self::link();
if (!mysql_ping(self::$oConnexionRes))
{
die ('Interruption du script'.
' : '.__CLASS__.'::'.__FUNCTION__.'() un problème '.
'de connexion inconnu a été identifié');
}
$queryTest='select 1 from '.self::$aConfigParam['table'].' limit 1';
if (!$result=mysql_query($queryTest,self::$oConnexionRes))
die ('Interruption du script'.
' Erreur dans '.__FUNCTION__.' : La table '.
self::$aConfigParam['table'].' est inexistante en base '.
self::$aConfigParam['db']);
}
/**
@param int $level :niveau d'erreur de l'exception
@param string $msg : message associé à l'exception
@desc :
Traite l'exception dans le fichier log associé
*/
protected function logIt($level,$msg)
{
self::link();
if (self::$oConnexionRes!==NULL)
{
$res=mysql_query('insert into '.self::$aConfigParam['table'].
' (level,time,msg,line,script,code) values'.
'("'.$level.'","'.$this->sTime.'","'.
mysql_real_escape_string($msg, self::$oConnexionRes).'",'.
$this->getLine().
',"'.mysql_real_escape_string($this->getFile(),
self::$oConnexionRes).
'",'.$this->getCode().')',self::$oConnexionRes);
if (!$res)
die ('<br/>Interruption du script:'.
' Impossible de rediriger la '.__CLASS__.
' en table debase:'.
' erreur rencontrée :'.mysql_error());
}
else die ('<br/>Interruption du script sur '.__CLASS__.'::'.
__FUNCTION__.'() : '.__CLASS__.'::setParam() doit être '.
'exécutée avant de lancer une '.__CLASS__);
}
/**
@desc :
clos la connexion
*/
public function closeConnexion()
{
if (mysql_ping(self::$oConnexionRes))
mysql_close(self::$oConnexionRes);
}
}
/**
Exemple utilisation des exceptions à rediriger vers un fichier log
*/
logFileException::setParam('testLog',true);
try
{
throw new logFileException('Exception 1 loguée vers logFile',1,
logException::LV_WARNING);
}
catch(logFileException $e)
{
echo '<br/>'.$e->getMessage();
try
{
throw new logFileException('Exception 2 loguée vers logFile',2,
logException::LV_NOTICE);
}
catch(logFileException $e2)
{
echo '<br/>'.$e2->getMessage();
print_r($e->getTrace());
}
}
/**
2 eme Exemple :
utilisation des exceptions à rediriger vers une db mysql
Pour éviter de passer par setParam il faut directement modifier les
valeurs dans la déclaration des propriétés de la classe
logDbMysqlException
*/
logDbMysqlException::setParam(array('host'=>'localhost',
'user'=>'userlogin',
'pwd'=>'pwdlogin',
'db'=>'test',
'table'=>'logtable'));
try
{
throw new logDbMysqlException('Exception 1 loguée vers Mysql 1',1,
logException::LV_WARNING);
}
catch(logDbMysqlException $e)
{
echo '<br/>'.$e->getMessage();
// à Ne pas oublier si derniere exception gérée
$e->closeConnexion();
}
?>
Historique
- 03 janvier 2008 01:29:36 :
- juste 1 petite modif
- 03 janvier 2008 13:29:10 :
- Correction d'un effet de bord sur connexions multiples.
- 03 janvier 2008 16:33:08 :
- correction bug
- 07 janvier 2008 20:22:52 :
- L214
Sources du même auteur
Sources de la même categorie
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
redirection en php [ par flatmax ]
salut, j'aimerais savoir comment faire une redirection en PHP. merci de votre aide
redirection [ par ouiouiteur ]
comment rediriger une page vers :-soit une page sur mon serveur chez moi, si ma connexion est active-soit vers une page sur un hebergeur gratuit pour
AIDER MOI VITE SVP [ par g0belin ]
Bon voila mon probleme dans le code si dessous y a une erreur que je n'ai pas trouver au bout de 4 heures aidez moi svp--------------ERREUR-----------
Date probleme [ par g0belin ]
Ben voila en fait je veux faire un agenda...je veux afficher seulement les entree dans la base pour le jour courant...MAIS sa marche PASsa m'affiche t
Redirection [ par poiiop ]
Bonjourje voudrais faire une redirection particuliere : depuis mons site j envoie vers un autre site mais j aimerais que ce site soit vu au travers de
urgent..DB.php lib [ par fatNugly ]
bonjourquelqu'un aurait il une idee ou je pourrais trouverla class DB.php SVP c'est urgent et je suis legerement dans le caca!!merci aux ames chari
urgent DB error: not found [ par fatNugly ]
j'ai un probleme..j'essai de me connecter a ma bd, voici le code<?phprequire_once("classes/sql2xml.php");require_once("classes/DB.php"); header("Co
Problème de redirection [ par alainG ]
Après avoir créé un enregistrement dans une table à l'aide d'un formulaire, j'essaie de rediriger vers une liste de mon fichier sur une autre page av
problème de redirection [ par kwak ]
Bonjour à tous,je me trouve depuis quelques temps déjà confronté à un problème de redirection. Ici le problème se pose pour rediriger l'utilisateur se
aide redirection [ par nokiaboy ]
Je suis un GROS GROS débutant en PHP et l'une des applications qui m'a poussé à m'y mettre, c'est le fait de pouvoir faire des redirections du genre "
|
Derniers Blogs
UNE JOLIE-HORLOGE ET PAS QU'UN PEU !UNE JOLIE-HORLOGE ET PAS QU'UN PEU ! par neodante
Pour les possesseurs d'iPhone, ça y est Bijin Tokei - qui se traduit littéralement en Français par " Jolie Horloge " - est arrivé et GRATUITEMENT s'il vous plaît ! Après la version Tokyo, Hokkaido, night club, racing, Gal, "pour les mademoiselles'", . voi...
Cliquez pour lire la suite de l'article par neodante TECHDAYS PARIS 2010 : CONNECTEZ VOS DONNéES à SHAREPOINT 2010 AVEC LES BUSINESS CONNECTIVITY SERVICESTECHDAYS PARIS 2010 : CONNECTEZ VOS DONNéES à SHAREPOINT 2010 AVEC LES BUSINESS CONNECTIVITY SERVICES par ROMELARD Fabrice
Animé par: Gaetan Bouveret et Julien Chomarat Business Connectivity Services (BCS) est dans SharePoint 2010 la version 2 de Business Data Catalog (BDC dans SharePoint 2007). Il s'agit de la solution permettant de visualiser des données provenan...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice [DIVERS] SUIVRE VOS SéRIES PRéFéRéS SUR LA TOILE[DIVERS] SUIVRE VOS SéRIES PRéFéRéS SUR LA TOILE par orion
Comme de nombreux geek, je suis un grand amateur de série TV et je rate régulièrement des épisodes de mes séries préférés. Une solution s'offre à vous avec ce merveilleux site : Tv Gorge - www.tvgorge.com Moteur de recherche à l'appui, vous pouvez ...
Cliquez pour lire la suite de l'article par orion TECHDAYS PARIS 2010 : LA BI DANS SHAREPOINT 2010TECHDAYS PARIS 2010 : LA BI DANS SHAREPOINT 2010 par ROMELARD Fabrice
Animé par: Vincent Bellet et Baptiste Giraudier La BI dans SharePoint 2010, Les nouveaux services d'application dans SP2010 et SQL Server Reporting services 2008 R2. La BI dans SharePoint est généralisée pour tous afin de permettre à tous les coll...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice
Forum
HTML VERS PDFHTML VERS PDF par spike911
Cliquez pour lire la suite par spike911
Logiciels
DB-MAIN (9.1.0)DB-MAIN (9.1.0)DB-MAIN is a data-modeling and data-architecture tool. It is designed to help developers and anal... Cliquez pour télécharger DB-MAIN Xilisoft DPG Convertisseur (5.1.37.0120)XILISOFT DPG CONVERTISSEUR (5.1.37.0120)Xilisoft DPG Convertisseur offre aux fans de Nintendo DS une bonne solution leur permettant de dé... Cliquez pour télécharger Xilisoft DPG Convertisseur GraphicsGale (2.01.01)GRAPHICSGALE (2.01.01)GraphicsGale est un logiciel de PixelArt avec de nombreuse fonctionnalités permettant de réalisé ... Cliquez pour télécharger GraphicsGale Architecte 3D (Platinum 2010)ARCHITECTE 3D (PLATINUM 2010)Architecte 3D Platinium vous permet de concevoir facilement les plans votre future maison, de l'é... Cliquez pour télécharger Architecte 3D TeamViewer 5 (TeamViewer 5)TEAMVIEWER 5 (TEAMVIEWER 5)Dépanner un ami,expliquer une manipulation devient un jeu d'enfant.
Prise en main d'un autre ord... Cliquez pour télécharger TeamViewer 5
Comparez les prix

HTC Hero
Entre 550€ et 550€
|