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
/**
*
class Log
{
/**
*
const DEFAULT_LOG_FILE = 'default.xml';
/**
*
const INITIALIZATION_TEXT = "<?xml version='1.0' encoding='ISO-8859-1' standalone='yes'?><logs></logs>";
/**
*
const MAIL_SUBJECT = 'Error log';
/**
*
private $type;
/**
*
private $file;
/**
*
private $mail;
/**
*
private $logArray = array();
/**
*
public function setType($type)
{
$this -> type = $type;
}
/**
*
public function getType()
{
return $this -> type;
}
/**
*
public function setFile($file)
{
$this -> file = $file;
}
/**
*
public function getFile()
{
return $this -> file;
}
/**
*
public function getLogArray()
{
return $this -> logArray;
}
/**
*
public function setLogArray( array $array )
{
$this -> logArray = $array;
}
/**
*
public function getMail()
{
return $this -> mail;
}
/**
*
public function setMail($mail)
{
$this -> mail = $mail;
}
/**
*
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);
}
}
/**
*
public function __destruct()
{
$this -> sendMail();
}
}
?>
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.