Dans mon application je logge beaucoup d'informations mais pas forcément exploitable.
par exemple, j'ai une classe Lang qui s'occupe de l'internationalisation et qui de temps à autre ne trouve pas une clé demandée.
J'obtiens ce comportement par un code du style:
Mon souci, c'est d'où provient ma clé ($name)?
Avec le code suivant, j'obtiens la succession des classes appelés et je peux répondre à ma question:
et le log obtenu ainsi ressemble à:
par exemple, j'ai une classe Lang qui s'occupe de l'internationalisation et qui de temps à autre ne trouve pas une clé demandée.
J'obtiens ce comportement par un code du style:
public function __get($name) {
$key=str_replace(' ','',trim(mb_strtolower($name,"UTF-8")));
if (array_key_exists($key,$this->msg)) {
return $this->msg[$key];
} else {
$this->log(Log:EBUG,'String internationalisée non trouvée: '.$key);
return 'Undefined';
}
}
Mon souci, c'est d'où provient ma clé ($name)?
Avec le code suivant, j'obtiens la succession des classes appelés et je peux répondre à ma question:
public function __get($name) {
$key=str_replace(' ','',trim(mb_strtolower($name,"UTF-8")));
if (array_key_exists($key,$this->msg)) {
return $this->msg[$key];
} else {
try {
//Lancement d'une exception juste pour avoir la pile d'exécution
throw new Exception('String internationalisée non trouvée: '.$key);
} catch (Exception $e) {
$tab=array();
foreach ($e->getTrace() as $pile) {
//Injection avec la clé afin de supprimer les doublons
$tab[$pile['class']]=$pile['class'];
}
$this->log(Log:EBUG,$e->getMessage().' dans ('.implode('->',array_reverse($tab)).')');
return 'Undefined';
}
}
}
et le log obtenu ainsi ressemble à:
Code :
26/10/2010 10:09:08> #MODE DEBUG: (Lang):String internationalisée non trouvée: pageaccueil dans (IndexController->IndexView->UserMenuView->MenuView->BaseView->Lang)