2011-08-18 3 views
8

J'ai configuré log4php pour me connecter à un fichier en utilisant l'appender LoggerAppenderRollingFile et la disposition LoggerLayoutTTCC. Lorsque je consigne une exception, cependant, elle n'affiche pas les détails de l'exception, tels que la trace de la pile, comme je le vois dans log4net.Comment afficher les informations d'exception dans le fichier journal avec log4php?

J'ai regardé rapidement le code et il semble que le LoggerAppenderMongoDB supporte les exceptions avec le formatThrowable method, mais je ne vois rien de similaire dans les autres appenders. Je sens qu'il me manque quelque chose d'évident. Y at-il quelque chose que j'ai besoin de configurer afin d'imprimer ces détails dans le fichier journal? Dois-je créer une classe LoggerAppender personnalisée? Ou peut-on les faire avec une mise en page différente ou un moteur de rendu personnalisé?

Répondre

1

Vous devez utiliser la fonction PHP set_exception_handler et encapsuler log4php à l'aide de cette fonction. vérifier à: http://php.net/manual/en/function.set-exception-handler.php

function exception_handler($exception) { 

$ log-> debug ($ exception-> getMessage()); }

set_exception_handler ('exception_handler');

1

Je suis arrivé à la même conclusion: il semble que log4php ne fasse que quelque chose avec le paramètre $throwable dans l'appender LoggerAppenderMongoDB.php.

La classe de base LoggerAppenderFile repose sur la mise en forme, LoggerLayoutTTCC, pour formater le message (comme prévu). Cette classe a une méthode ignoresThrowable(), qui retourne vrai. Bien que cette méthode ne semble pas être appelée, elle communique avec légèreté que les auteurs ne semblaient pas avoir l'intention de prendre note de l'erreur.

J'ai ajouté ma propre classe de mise en page qui s'étend LoggerLayoutTTCC et remplace le format()

class LoggerLayoutTTCCWithException extends LoggerLayoutTTCC 
    { 
     public function format(LoggerLoggingEvent $event) { 
      $format = parent::format($event); 

      $throwableInfo = $event->getThrowableInformation(); 
      if ($throwableInfo === null) { 
       return $format; 
      } 

      $renderer = new LoggerRendererException(); 
      return $format . $renderer->render($throwableInfo->getThrowable()); 
     } 
    } 
2

Pour votre information, maintenant que LoggerLayoutTTCC est dépréciée, vous pouvez utiliser LoggerLayoutPattern avec une meilleure chaîne de format pour inclure des exceptions.

<layout class="LoggerLayoutPattern"> 
    <param name="conversionPattern" value="%d{m/d/y H:i:s,u} [%t] %p %c %x - %m %newline%throwable" /> 
</layout> 

<!-- %newline%throwable is the important part --> 

Voir la section Exceptions de journalisation des docs: http://logging.apache.org/log4php/docs/layouts/pattern.html#Logging_exceptions

Questions connexes