class kwExceptionHandler extends kwExceptionHandler_parent
{
public function writeExceptionToLog($exception)
{
parent::writeExceptionToLog($exception);
$logger = Registry::getLogger();
$logger->error('kwExceptionHandler!');
}
}
Modul ist aktiviert und im Backend zeigt er mir, dass der OxidEsales\Eshop\Core\Exception\ExceptionHandler mit kemweb/kwexceptionhandler/kwExceptionHandler erweitert wurde.
Wenn ich jedoch eine Exception werfe wird nur der Core ExceptionHandler aufgrufen.
Versuch 2:
Dann habe ich das set_exception_handler() in source/bootstrap.php gesehen und in source/modules/functions.php meinen Handler eingebunden:
wie genau erzeugst Du eine Exception? Baust Du einen Syntax Fehler ein oder ähnliches?
Der ExceptionHandler ist anscheinend auch als deprecated markiert, dort gab es letztens einen Forumseintrag zum Monolog Logging von Symfony Neues OXID-Logging für Info-Einträge nutzen vielleicht hilft Dir dieser Ansatz mehr weiter
Das liegt aber an der bootstrap.php, weil die function startProfile() nur noch in der overrideablefunctions.php definiert ist und diese wird später eingebunden als die modules/functions.php
Das liegt aber an der bootstrap.php, weil die function startProfile() nur noch in der overrideablefunctions.php definiert ist und diese wird später eingebunden als die modules/functions.php
Ja und da beist sich doch die Katze in den Schwanz. Denn dem Kommentar in der bootstrap.php nach soll der Error Handler genau dort überschrieben werden:
Set exception handler before including modules/functions.php so it can be overwritten easiliy by shop operators.
Nun habe ich die bootstrap.php geändert, aber gefühlt ist das schon sehr nahe an einem core hack und die Datei wird potenziell bei einem Update überschrieben. Oder sehe ich das falsch?
Damit funktioniert es nun aber, sehr schön.
Vielen Dank schon mal und frohe Weihnachten!
Zusammenfassung
Hier nochmal die Zusammenfassung, falls das nochmal jemand machen will:
in der source/bootstrap.php habe ich modules/functions.php unter overridablefunctions.php geschoben:
/**
* modules/functions.php moved, see below...
*/
/**
* The functions defined conditionally in this file may have been overwritten in 'modules/functions.php',
* so their functionality may have changed completely.
*/
require_once OX_BASE_PATH . 'overridablefunctions.php';
/**
* Custom bootstrap functionality.
* Moved below overridablefunctions to use oxNew()
*/
if (@is_readable(OX_BASE_PATH . 'modules/functions.php')) {
include OX_BASE_PATH . 'modules/functions.php';
}
Dann habe ich in modules/functions.php meinen ErrorHandler hinzugefügt:
Idee um eine updatesichere Lösung zu implementieren wäre das require_once der overrideabelfunctions.php in Deine functions.php oben setzen. Vorteil wäre die bootstrap.php bleibt unverändert und das require_once stellt sicher das nur 1x included.
Also einfach in modules/functions.php die overridablefunctions laden und dann den ErrorHandler überschreibbar machen. Dann geht es mit dem eigenen Module wie oben beschrieben: