2011-08-18 5 views
8

Ho impostato log4php per accedere a un file utilizzando l'appender LoggerAppenderRollingFile e il layout. Quando registro un'eccezione, tuttavia, non visualizza i dettagli delle eccezioni come la traccia dello stack come sono abituato a vedere in log4net.Come stampare informazioni sulle eccezioni nel file di log con log4php?

Ho dato una rapida occhiata al codice e sembra che lo LoggerAppenderMongoDB abbia il supporto per la visualizzazione delle eccezioni con lo formatThrowable method, ma non vedo nulla di simile negli altri appendici.

Mi sento come se mi mancasse qualcosa di ovvio. C'è qualcosa che devo configurare per stampare questi dettagli nel file di registro? Devo creare una classe LoggerAppender personalizzata? Oppure possono essere fatti con un layout diverso o un renderizzatore personalizzato?

risposta

1

Si dovrebbe utilizzare la funzione PHP set_exception_handler e wrap log4php utilizzando questa funzione. lo controllo fuori a: http://php.net/manual/en/function.set-exception-handler.php

function exception_handler($exception) { 

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

set_exception_handler ('exception_handler');

1

Sono giunto alla stessa conclusione: sembra che log4php faccia qualcosa con il parametro $throwable nell'appender LoggerAppenderMongoDB.php.

La classe base LoggerAppenderFile si basa sul layout, LoggerLayoutTTCC, per formattare il messaggio (come previsto). Quella classe ha un metodo ignoresThrowable(), che restituisce true. Anche se questo metodo non sembra essere chiamato, comunica leggermente che gli autori non sembrano intenzionati a prendere nota dell'errore.

ho aggiunto la mia classe di layout che si estende LoggerLayoutTTCC e sovrascrive formato()

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

Cordiali saluti, ora che LoggerLayoutTTCC è deprecato, è possibile utilizzare LoggerLayoutPattern con una stringa di formato meglio includere eccezioni.

<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 --> 

Vedere la sezione Eccezioni di registrazione dei documenti: http://logging.apache.org/log4php/docs/layouts/pattern.html#Logging_exceptions

Problemi correlati