07-02-2008, 03:21 PM
Pour ma part, je considère les logs, les traces et le suivi des utilisateurs comme importants mais je distingue les 3.
Pour moi une trace sert au débuggage de l'application.
Les traces indiquent ce par quoi passe le code et permet de suivre toutes les actions.
Les traces sont stockés dans des fichiers textes horodatés et j'ai un fichier par Objet.
Voici un exemple de trace généré
Pour moi une trace sert au débuggage de l'application.
Les traces indiquent ce par quoi passe le code et permet de suivre toutes les actions.
Les traces sont stockés dans des fichiers textes horodatés et j'ai un fichier par Objet.
Voici un exemple de trace généré
Code PHP :
<?php
27/12/2007 11:21:45 | INFO | BuildingModel | 10 | [BuildingModel::__construct] ==> Begin
27/12/2007 11:21:45 | INFO | BuildingModel | 11 | [BuildingModel::__construct] ==> End
27/12/2007 11:21:47 | INFO | BuildingModel | 34 | [BuildingModel::loadBuildingByPlanet] ==> Begin
27/12/2007 11:21:47 | DEBUG | BuildingModel | 35 | [BuildingModel::loadBuildingByPlanet] ==> Paramater universe_id=[1]
27/12/2007 11:21:47 | DEBUG | BuildingModel | 36 | [BuildingModel::loadBuildingByPlanet] ==> Parameter planet_id=[1]
27/12/2007 11:21:47 | DEBUG | BuildingModel | 41 | [BuildingModel::loadBuildingByPlanet] ==> Query=[select b.id,a.building_id,a.building_level,b.category,b.img,b.effect_value,b.effect_formule,b.energy_value,b.energy_formule,b.time_value,b.time_formule from exodus_building_planet_1 a,admin_building b where b.universe_id=1 and a.building_id=b.building_id and a.planet_id=1 order by b.building_id]
27/12/2007 11:21:48 | INFO | BuildingModel | 44 | [BuildingModel::loadBuildingByPlanet] ==> End
27/12/2007 11:21:48 | INFO | BuildingModel | 51 | [BuildingModel::loadCostByBuilding] ==> Begin
27/12/2007 11:21:48 | DEBUG | BuildingModel | 52 | [BuildingModel::loadCostByBuilding] ==> Paramater universe_id=[1]
27/12/2007 11:21:48 | DEBUG | BuildingModel | 53 | [BuildingModel::loadCostByBuilding] ==> Parameter building_row_id=[1]
27/12/2007 11:21:48 | DEBUG | BuildingModel | 58 | [BuildingModel::loadCostByBuilding] ==> Query=[select ore_id,cost_value,cost_formule from admin_building_cost where ext_id=1 order by ore_id]
27/12/2007 11:21:48 | INFO | BuildingModel | 61 | [BuildingModel::loadCostByBuilding] ==> End
Et voici la classe "Tracer"
Code PHP :
<?php
class Tracer
{
private $path;
private $filename;
private $type;
function __construct($path,$filename,$type='D')
{
if( !is_string($path) ) throw new Exception('Invalid Parameter [path] : '.$path,2001);
if( !is_string($filename) ) throw new Exception('Invalid Parameter [filename] : '.$filename,2002);
if( !is_string($type) ) throw new Exception('Invalid Parameter [type] : '.$type,2003);
if( ( 'H' != $type ) && ( 'D' != $type ) ) throw new Exception('Unexpected Value [type] : '.$type,2004);
$this->path = $path;
$this->filename = $filename;
$this->type = $type;
}
public function trace($level,$file,$line,$mess)
{
if( $_GLOBALS['config']['debug'] )
{
if( !is_string($level) ) throw new Exception('Invalid Parameter [level] : '.$level,2008);
if( !is_string($mess) ) throw new Exception('Invalid Parameter [mess] : '.$mess,2009);
$name = $this->path.'/'.$this->filename.'-'.(('D'==$this->type)?date('Ymd'):date('YmdH')).'.txt';
$h = @fopen($name,'a');
if( false === $h ) throw new Exception('Impossible to open trace file : '.$name,2005);
$mess = sprintf("%s | %-7s | %s | %-5u | %s\n",date("d/m/Y H:i:s"),$level,$file,$line,$mess);
if( false === @fwrite($h, $mess)) throw new Exception('Impossible to write trace in '.$name.' ['.$mess.']',2006);
fclose($h);
}
}
}