2011-08-18 9 views
8

Skonfigurowałem log4php, aby zalogować się do pliku, korzystając z aplikacji dołączającej LoggerAppenderRollingFile i układu LoggerLayoutTTCC. Kiedy jednak loguję wyjątek, nie wyświetla on szczegółów wyjątków, takich jak śledzenie stosu, takie jakie widziałem w log4net.Jak wypisywać informacje o wyjątkach w pliku dziennika przy pomocy log4php?

Przejrzałem kod i wygląda na to, że LoggerAppenderMongoDB obsługuje wyświetlanie wyjątków za pomocą formatThrowable method, ale nie widzę niczego podobnego w innych aplikacjach.

Czuję, że brakuje mi czegoś oczywistego. Czy jest coś, co muszę skonfigurować, aby wydrukować te szczegóły w pliku dziennika? Czy muszę utworzyć niestandardową klasę LoggerAppender? Czy można to zrobić z innym układem lub niestandardowym rendererem?

Odpowiedz

1

Należy użyć funkcji PHP set_exception_handler i zawinąć log4php za pomocą tej funkcji. to sprawdzić pod adresem: http://php.net/manual/en/function.set-exception-handler.php

function exception_handler($exception) { 

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

set_exception_handler ('exception_handler');

1

Doszedłem do tego samego wniosku: wygląda na to, że log4php robi coś tylko z parametrem $throwable w aplikatorze LoggerAppenderMongoDB.php.

Podstawowa klasa LoggerAppenderFile opiera się na układzie, LoggerLayoutTTCC, w celu sformatowania wiadomości (zgodnie z oczekiwaniami). Ta klasa ma metodę ignoresThrowable(), która zwraca wartość true. Chociaż wydaje się, że ta metoda nie jest wywoływana, łagodnie komunikuje, że autorzy nie zamierzali zanotować tego błędu.

Dodałem moje własne klasy układ, który rozciąga LoggerLayoutTTCC i nadpisuje 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()); 
     } 
    }