Php 5 classe de log paramétrée par un fichier xml

Soyez le premier à donner votre avis sur cette source.

Vue 8 683 fois - Téléchargée 468 fois

Description

Cette source est simplement une classe de logs paramétrée par un fichier xml : on peut y ajouter différents types de logs (debug, error, sql, etc...) définir un fichier différent pour chaque type et définir une adresse mail qui recevra la liste des erreurs.
Remarque : l'adresse mail est optionnelle (évite le spam dans un projet en cours de développement).

Cette source se décompose en 3 fichiers :
log.php -> contient la classe en elle même
logConfig.xml -> configuration
test.php -> un fichier de test que j'ai utilisé pour le développement

Source / Exemple :


<?php
/**

  • Log manager class
*
  • /
class Log { /**
  • Default log file
*
  • /
const DEFAULT_LOG_FILE = 'default.xml'; /**
  • Xml file initialization
*
  • /
const INITIALIZATION_TEXT = "<?xml version='1.0' encoding='ISO-8859-1' standalone='yes'?><logs></logs>"; /**
  • Default mail subject
*
  • /
const MAIL_SUBJECT = 'Error log'; /**
  • log type
*
  • @var string
  • /
private $type; /**
  • file name
*
  • @var string
  • /
private $file; /**
  • mail address
*
  • @var string
  • /
private $mail; /**
  • log message list
*
  • @var array
  • /
private $logArray = array(); /**
  • Accessor
*
  • @param string $type
  • /
public function setType($type) { $this -> type = $type; } /**
  • Accessor
*
  • @return string
  • /
public function getType() { return $this -> type; } /**
  • Accessor
*
  • @param string $file
  • /
public function setFile($file) { $this -> file = $file; } /**
  • Accessor
*
  • @return string
  • /
public function getFile() { return $this -> file; } /**
  • Accessor
*
  • @return array
  • /
public function getLogArray() { return $this -> logArray; } /**
  • Accessor
*
  • @param array $array
  • /
public function setLogArray( array $array ) { $this -> logArray = $array; } /**
  • Accessor
*
  • @return string
  • /
public function getMail() { return $this -> mail; } /**
  • Accessor
*
  • @param string $mail
  • /
public function setMail($mail) { $this -> mail = $mail; } /**
  • Constructor
*
  • @param string $type
  • /
public function __construct($type = 'udefined') { $this -> type = $type; //get log file from xml config $xml = simplexml_load_file('logConfig.xml'); $xpathResult = (array) $xml -> xpath("/logs/log[type='" . $type . "']/file"); $file = (string) $xpathResult[0]; if (trim($file) !='') $this -> file = $file; else $this -> file = self::DEFAULT_LOG_FILE; //get mail from xml config $xpathResult = (array) $xml -> xpath("/logs/log[type='" . $type . "']/mail"); $mail = (string) $xpathResult[0]; if (trim($mail) !='') $this -> mail = $mail; } /**
  • Write a log message in xml file
*
  • @param string $logMessage
  • /
public function write($logMessage) { if (!file_exists($this -> file) ) { //if not exists -> creat $file = fopen($this -> file, 'w'); fputs($file, self::INITIALIZATION_TEXT); fclose($file); } //xml building $xml = simplexml_load_file($this -> file); $xml->addChild('log'); $newNodeIndex = count($xml -> log) - 1; $xml-> log[$newNodeIndex] ->addChild('type', $this -> type); $xml-> log[$newNodeIndex] ->addChild('date', date('d-m-Y H:i:s')); $xml-> log[$newNodeIndex] -> addChild('message', $logMessage); //log array building $this -> logArray[] = date('d-m-Y H:i:s') . " " . $this -> type . " : " . $logMessage; //write xml in file $handle = fopen($this -> file, 'w+'); fputs($handle, $xml->asXML()); fclose($handle); } /**
  • Send a mail : see logConfig.xml
  • only if mail is set in xml file
*
  • /
public function sendMail() { if( isset($this -> mail)) { $mailText = ''; foreach ($this -> logArray as $log) $mailText .= $log . "\n"; if( trim($mailText)!='' ) mail($this -> mail, self::MAIL_SUBJECT, $mailText); } } /**
  • Desctructor
*
  • /
public function __destruct() { $this -> sendMail(); } } ?>

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

cs_morpheus57
Messages postés
122
Date d'inscription
vendredi 31 mars 2006
Statut
Membre
Dernière intervention
30 décembre 2010
-
Ah oui, j'ai oublié de préciser :
Il est possible d'ajouter un nouveau type d'erreur simplement en modifiant le fichier logConfig.xml.

Ensuite le nouveau type de log peu être directement instancié.
cs_oox
Messages postés
6
Date d'inscription
dimanche 22 avril 2007
Statut
Membre
Dernière intervention
26 avril 2007
-
Petite erreur dans ton code :
if (isset($this -> mail))

Cette ligne retournera toujours true.
=> if (! empty($this -> mail))

Sinon rien à redire, bon code.

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.