Unbrauchbare Exception wenn Logger nicht registriert

Das Forum ist für das Melden von Bugs gedacht. // This forum is intended to report bugs with the APF.
Gesperrt
Nova
Beiträge: 31
Registriert: 22.07.2010, 11:57:29

Unbrauchbare Exception wenn Logger nicht registriert

Beitrag von Nova » 16.11.2013, 03:14:41

Hallo zusammen,
ich habe gerade eine wunderschöne Stunde mit dem allseits beliebten "Fatal error: Exception thrown without a stack frame in Unknown on line 0" gekämpft. Die gute Nachricht: Ich konnte die Ursache ausmachen.

Minimalbeispiel:

Code: Alles auswählen

<?php
date_default_timezone_set("Europe/Berlin");

require_once('core/pagecontroller/pagecontroller.php');
import('core::logging','Logger');
import('core::logging::writer', 'StdOutLogWriter');

$logger = &Singleton::getInstance('Logger');
$logger->addLogWriter("a", new StdOutLogWriter() );
$logger->logEntry("b", "Test");
?>
Ergibt bei mir im APF 1.17, PHP 5.2.17 die genannte Fehlermeldung:

Code: Alles auswählen

Fatal error: Exception thrown without a stack frame in Unknown on line 0 
Wünschenswert wäre eine hilfreiche Exception.

Das Problem liegt in der Logger.php in der Funktion

Code: Alles auswählen

public function getLogWriter($target) {
      if (isset($this->writers[$target])) {
         return $this->writers[$target];
      }      
      throw new LoggerException('Log writer with name "' . $target . '" is not registered!');
   }
Diese Exception wird kann nicht geworfen werden. Warum auch immer, dazu kenne ich mich mit den Untiefen von PHP zu wenig aus... Vielleicht könnt ihr ja damit was anfangen. In der Doku sieht es ja so aus als würde der Fehler nicht immer auftreten.

Grüße,
nova

Benutzeravatar
dr.e.
Administrator
Beiträge: 4555
Registriert: 04.11.2007, 16:13:53

Re: Unbrauchbare Exception wenn Logger nicht registriert

Beitrag von dr.e. » 16.11.2013, 12:30:12

Hallo Nova,

ich habe das versucht lokal nachzustellen und erhalte auf PHP 5.4.16 eine saubere Exception:

Code: Alles auswählen

Fatal error: Uncaught exception 'LoggerException' with message 'Log writer with name "b" is not registered!' in ***
Es gibt (leider) Situationen, in denen sich PHP nicht besonders auskunftsfreudig gibt. Das ist zumeist der Fall, denn im ExceptionHandler nochmals eine Exception auftritt. Beim Logger ist das oft der Fall wenn kein Log geschrieben werden kann, was sich hier gegenseitig bedingt und dadurch zu einem endlosen Fehlverhalten führt.

Einziger Tipp, der hier verlässlich funktioniert ist, den APF Error- und ExceptionHandler zu deaktivieren. Das geht wie folgt:

Code: Alles auswählen

GlobalErrorHandler::disable();
GlobalExceptionHandler::disable();
Details siehe http://adventure-php-framework.org/Seit ... ktivierung und http://adventure-php-framework.org/Seit ... ktivierung.

Ebenfalls hilfreich kann das Registrieren einer shutdown function sein, die den letzten Fehler per error_get_last() den zuletzt gefangenen Fehler ausliest und sauber behandelt. Ein Beispiel hierzu findet sich auch unter http://www.php.net/manual/en/function.e ... .php#94443.

Entschuldige bitte, dass ich hier keine Lösung mit dem APF anbieten kann, IMHO liegt das Verhalten eindeutig an PHP. :?
Viele Grüße,
Christian

Nova
Beiträge: 31
Registriert: 22.07.2010, 11:57:29

Re: Unbrauchbare Exception wenn Logger nicht registriert

Beitrag von Nova » 16.11.2013, 14:34:29

Hallo,
ich hatte schon befürchtet dass PHP da Schuld ist. Aber wenn die neuere Version da sich korrekt verhält, besteht ja Hoffnung. :D Habe es gerade auf einem anderen Server mit PHP 5.3.10 getestet, da funktioniert es auch richtig.

Danke jedenfalls.

Grüße,
nova

Gesperrt

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast