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

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

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.