Fehlermeldungen in Shopware debuggen

Debugging von Fehlern, die nicht im Logfile stehen

Abseits vom Shopware Backend kann es auch an anderen Stellen durch vielfältige Gründe zu Fehlern kommen, die dann natürlich nicht im Logfile stehen, aber wie herausfinden, woran es jetzt scheitert?

Wie finde ich die Fehlermeldungen?

Beim debuggen ist Dir die config.php behilflich, nützliche Tipps findest du hier

Wenn ein schwerwiegender Fehler aufgetreten ist, merke Dir zuerst den Zeitpunkt, wann der Fehler auftrat! Danach schaue, mit welchen Schritten Du den Fehler reproduzieren kannst und überlege, ob der Fehler aus Shopware selbst oder einem Plugin kommen könnte. Danach begibst Du dich auf die Suche nach der Meldung:

Frontend Error Reporter

Der Frontend Error Reporter ist eine Möglichkeit, Dir schwerwiegende Fehler direkt im Frontend anzuzeigen, statt die "Es ist ein Fehler aufgetreten"-Seite anzuzeigen. Da das Template die Meldungen direkt ausgibt und so auch Deinen Kunden angezeigt wird, empfiehlt sich der Einsatz nur, wenn gerade wenig Traffic auf dem Shop ist oder Du in einer Entwicklungsumgebung arbeitest. Den Error Reporter aktivierst Du in der config.php durch hinzufügen der folgenden Zeilen:

 
'front' => array(
  'showException' => true,
  'noErrorHandler' => false,
),
 
//Low-Level PHP-Fehler ab Shopware 5.2.0
'phpsettings' => [
    'display_errors' => 1,
]
 

Deine config.php sieht dann in etwa so aus:

 
<?php return array (
  'db' => 
  array (
    'host' => 'HOST',
    'port' => 'PORT',
    'username' => 'USER',
    'password' => 'PASSWORD',
    'dbname' => 'DBNAME',
  ),
  'front' => array(
    'showException' => true,
    'noErrorHandler' => false,
  ),
 
  //Low-Level PHP-Fehler ab Shopware 5.2.0
  'phpsettings' => [
    'display_errors' => 1,
  ]
);
 

Nachdem Du die Datei gespeichert hast, werden die Fehler direkt im Frontend ausgegeben.

Log Dateien

Sollte irgendwo im Frontend ein schwerwiegender Fehler auftreten, wird dieser ins Logfile auf dem Server geschrieben, diese Datei findest Du unter /var/log/ auf deinem Server, ein Beispiel wäre hier zum Beispiel core_production-2016-02-01.log. Je nachdem, in welcher Umgebung deine Installation betrieben wird (Live, Testsystem) oder von wo der Fehler kommt (Core, Plugin) kann die Datei auch anders heißen. Wichtig hierbei ist vor allem das Datum. Es wird dabei für jeden Tag eine neue Datei angelegt. Wenn dein Fehler wahrscheinlich aus einem Plugin kommt, dürfte er in einer "plugin_production-DATUM.log" stehen, wenn er eher aus Shopware selbst kommt, steht er in einer "core_production-DATUM.log". Öffne die Datei und suche nach dem Zeitpunkt, zu dem der Fehler auftauchte (ca. minutengenau), hier solltest Du nun eine Fehlermeldung finden, die Dir den Fehler beschreibt. Wie Du diese Meldungen deutest, erklären wir noch.

System-Log im Backend

Ab der Shopware Version 5.2.13 kannst Du auch im Backend die Meldungen im System-Log einsehen. Hierzu findest Du unter Einstellungen > Logfile den neuen Reiter namens "System-Log" (1). Mit einem Klick auf das Lupensymbol (2) erhältst Du detaillierte Informationen zu den einzelnen Meldungen. Im Bereich "Datei" (3) kannst Du zwischen den einzelnen Log-Dateien wechseln und auch gezielt Log-Dateien herunterladen, wenn Du diese beispielsweise weiterleiten möchtest.

Fehlermeldungen per E-Mail senden lassen

In den Grundeinstellungen unter System > Log hast Du die Möglichkeit, Dir Fehlermeldungen per E-Mail senden zu lassen.

Achtung! Diese Einstellung sendet Dir sämtliche Fehler im Shop per E-Mail zu, die auftreten, auch wenn diese den normalen Betrieb nicht stören. Daher ist es nicht sinnvoll, sich im Produktivmodus die Fehler per E-Mail senden zu lassen.

Wie lese ich Fehlermeldungen?

In diesem Absatz geht es nun darum, welche Informationen in den Fehlermeldungen enthalten sind und wie Du diese ausgewertest.

Bereich Hinweise zur Analyse
Stack trace Hier findest Du Informationen zu den zuletzt aufgerufenen Funktionen. So kannst Du herausfinden, an welcher Stelle eine Funktion aufgerufen wurde, die zum Fehler führte. Häufig werden hier auch Plugin-Namen mit aufgeführt. Dieses Plugins sollten dann der erste Ansatzpunkt sein, wenn Du in die Fehleranalyse gehst.
Time Diese Information bietet die Option weiter einzugrenzen, ob es regelmäßig oder ggf. zu geplanten Operationen zu diesem Verhalten kommt.
uri Hier wird die aufgerufene URL angezeigt. Mit einem manuellen Aufruf der URL kannst Du eingrenzen, ob beispielsweise "nur" der Aufruf einer nicht (mehr) existenten URL, beispielsweise durch einen Bot, die Fehlermeldung hervorgerufen hat. Anderenfalls kann der Ort des Auftretens näher bestimmt werden.
query Liefert weitere Informationen, ob das Verhalten im Frontend/Backend auftritt, welcher Controller angesprochen wurde, etc.
shopId / shopName Wenn Sprach- und/oder Subshops eingesetzt werden, kannst Du hier sehen, in welchem Shop der Fehler auftrat.

PHP Fehlermeldungen

PHP-Fehler sind etwas schwerer zu debuggen als die anderen, da Du zumeist nur einen "503" oder "500" vom Server zurück bekommst und die Meldung nicht direkt sehen kannst. Um die die Fehler auszugeben, kannst Du ins Error-Log-Verzeichnis deines Servers schauen. Falls Du nicht weißt, wo Du das Verzeichnis findest, frag deinen Hoster, dieser kann Dir die Antwort geben. Danach gibt es 2 Wege:

  • Schaue dann einmal die Logs durch, taucht für deinen Fehler keine Meldung auf oder es wrd nichts geloggt, bitte deinen Hoster, das "Debug-Level" zu erhöhen, damit auch "unkritischere" Fehler geloggt werden. Danach solltest Du eine Ausgabe bekommen und kannst debuggen.
  • Wenn Du über das nötige technische Wissen verfügst, kannst du, sofern Du weißt, wo der Fehler im Quellcode auftritt, an dieser Stelle ein "die" mit Fehlerausgabe einbauen und schauen, was Dir für Fehler angezeigt werden. Vergiss aber nicht, die Datei nach dem debuggen wieder in den Ursprungszustand zu versetzen, damit deine Besucher keine Fehlerseite mit detaillierter Fehlerausgabe sehen.

Template Fehlermeldungen

Template Fehler werden Dir je nach Fehler entweder mittels Error Reporter direkt im Frontend, oder aber in der Log-Datei ausgegeben und sehen so aus:

 
[2016-02-22 09:43:20] core.ERROR: exception 'SmartyException' with message 'Unable to load template snippet 'frontend/index/headers.tpl' in 'frontend/error/index.tpl|frontend/plugins/seo/index.tpl'' in /home/shopware/www/sw513/engine/Library/Smarty/sysplugins/smarty_internal_templatebase.php:127 
Stack trace: 
#0 /home/shopware/www/sw513/engine/Library/Smarty/sysplugins/smarty_internal_template.php(286): Smarty_Internal_TemplateBase->fetch(NULL, NULL, NULL, NULL, false, false, true) 
#1 /home/shopware/www/sw513/var/cache/production_201602150844/templates/frontend_Responsive_de_DE_1/46/99/47/469947a92e6ed4db0e2e8a7b3c45ebd31eaf531b.snippet.index.tpl.php(170): Smarty_Internal_Template->getSubTemplate('frontend/index/...', NULL, 'frontend_Respon...', NULL, NULL, Array, 0) 
#2 /home/shopware/www/sw513/engine/Library/Smarty/sysplugins/smarty_internal_templatebase.php(180): content_56caca285e1fa9_34792271(Object(Enlight_Template_Default)) 
#3 /home/shopware/www/sw513/engine/Library/Enlight/View/Default.php(274): Smarty_Internal_TemplateBase->fetch() 
#4 /home/shopware/www/sw513/engine/Library/Enlight/Controller/Plugins/ViewRenderer/Bootstrap.php(216): Enlight_View_Default->render(Object(Enlight_Template_Default)) 
#5 /home/shopware/www/sw513/engine/Library/Enlight/Controller/Plugins/ViewRenderer/Bootstrap.php(242): Enlight_Controller_Plugins_ViewRenderer_Bootstrap->renderTemplate(Object(Enlight_Template_Default)) 
#6 /home/shopware/www/sw513/engine/Library/Enlight/Controller/Plugins/ViewRenderer/Bootstrap.php(136): Enlight_Controller_Plugins_ViewRenderer_Bootstrap->render() 
#7 [internal function]: Enlight_Controller_Plugins_ViewRenderer_Bootstrap->onPostDispatch(Object(Enlight_Controller_ActionEventArgs)) 
#8 /home/shopware/www/sw513/engine/Library/Enlight/Event/Handler/Default.php(91): call_user_func(Array, Object(Enlight_Controller_ActionEventArgs)) 
#9 /home/shopware/www/sw513/engine/Library/Enlight/Event/EventManager.php(210): Enlight_Event_Handler_Default->execute(Object(Enlight_Controller_ActionEventArgs)) 
#10 /home/shopware/www/sw513/engine/Library/Enlight/Controller/Action.php(201): Enlight_Event_EventManager->notify('Enlight_Control...', Object(Enlight_Controller_ActionEventArgs)) 
#11 /home/shopware/www/sw513/engine/Library/Enlight/Controller/Dispatcher/Default.php(523): Enlight_Controller_Action->dispatch('genericErrorAct...') 
#12 /home/shopware/www/sw513/engine/Library/Enlight/Controller/Front.php(226): Enlight_Controller_Dispatcher_Default->dispatch(Object(Enlight_Controller_Request_RequestHttp), Object(Enlight_Controller_Response_ResponseHttp)) 
#13 /home/shopware/www/sw513/engine/Shopware/Kernel.php(153): Enlight_Controller_Front->dispatch() 
#14 /home/shopware/www/sw513/vendor/symfony/http-kernel/HttpCache/HttpCache.php(492): Shopware\Kernel->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true) 
#15 /home/shopware/www/sw513/engine/Shopware/Components/HttpCache/AppCache.php(255): Symfony\Component\HttpKernel\HttpCache\HttpCache->forward(Object(Symfony\Component\HttpFoundation\Request), true, NULL) 
#16 /home/shopware/www/sw513/vendor/symfony/http-kernel/HttpCache/HttpCache.php(449): Shopware\Components\HttpCache\AppCache->forward(Object(Symfony\Component\HttpFoundation\Request), true) 
#17 /home/shopware/www/sw513/vendor/symfony/http-kernel/HttpCache/HttpCache.php(349): Symfony\Component\HttpKernel\HttpCache\HttpCache->fetch(Object(Symfony\Component\HttpFoundation\Request), true) 
#18 /home/shopware/www/sw513/engine/Shopware/Components/HttpCache/AppCache.php(178): Symfony\Component\HttpKernel\HttpCache\HttpCache->lookup(Object(Symfony\Component\HttpFoundation\Request), true) 
#19 /home/shopware/www/sw513/vendor/symfony/http-kernel/HttpCache/HttpCache.php(213): Shopware\Components\HttpCache\AppCache->lookup(Object(Symfony\Component\HttpFoundation\Request), true) 
#20 /home/shopware/www/sw513/engine/Shopware/Components/HttpCache/AppCache.php(114): Symfony\Component\HttpKernel\HttpCache\HttpCache->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true) 
#21 /home/shopware/www/sw513/shopware.php(101): Shopware\Components\HttpCache\AppCache->handle(Object(Symfony\Component\HttpFoundation\Request)) 
#22 {main} [] {"uid":"51a7455"}
 

Die Meldung sagt aus, dass ein Template Snippet nicht gefunden werden konnte. In 'frontend/index' wird irgendwo versucht 'frontend/index/headers.tpl' zu laden, welche es aber nicht gibt (oder fehlende Dateirechte aufweist). Prüfe also erst einmal, ob die Datei überhaupt vorhanden ist und ob diese die passenden Rechte besitzt. Falls die Datei nicht vorhanden ist, gibt es 2 Wege: Fehlt die Datei? oder Wird hier die falsche Datei aufgerufen?

Den Fehler kannst Du ausbügeln, in dem Du hier im Beispiel alle Dateien unter 'frontend/index/' öffnest und schaust, wo eine "headers.tpl" includiert (eingebunden) wird. Hast Du die Datei gefunden (Im Beispeil 'frontend/index/index.tpl'), vergleiche diese Datei mit der selben Datei des Standardtemplates. Wird im Standardtemplate die gleiche Datei includiert, fehlt diese und Du musst die Datei wieder beschaffen. Wird die Datei im Standard nicht includiert, wird diese Datei in deinem Template falsch abgefragt. Im Beispiel liegt hier ein Schreibfehler vor und statt header.tpl wird headers.tpl includiert. Du musst also die Datei, in der die falsche Datei includiert wird, ändern und wieder speichern. Danach wird Dir der Fehler nicht mehr angezeigt.

MySQL Fehlermeldungen

MySQL Fehler können Dir zum Beispiel beim Arbeiten im Backend begegnen und diverse Ursachen haben. Merke dir, was Du gemacht hast, als Du diesen Fehler bekommen hast, zum Beispiel einen Artikel oder Eigenschaften gespeichert.

 
exception 'PDOException' with message 'SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '185-38' for key 'PRIMARY'' in /var/www/vhosts/domain.de/swverzeichnis/vendor/doctrine/dbal/lib/Doctrine/DBAL/Connection.php:987
 

Duplicate entry '185-38' besagt, dass versucht wird, einen Wert mit 185-38 zu speichern, den es aber schon gibt. Das kann daran liegen, dass mehrere Benutzer im Backend gerade exakt das gleiche tun (Beide versuchen im gleichen Moment, eine neue Eigenschaft anzulegen) oder es passiert ein Fehler beim Neu-Installieren eines Plugins (Beim Deinstallieren wird etwas nicht aus der Datenbank entfernt, was beim Install aber wieder hnzugefügt werden soll). So kannst Du den Fehler eingrenzen und in der Datenbank schauen, welcher Eintrag hier falsch ist und diesen ggf. händisch löschen.

Achtung: Wenn Du Änderungen an der Datenbank vornimmst, mach vorher unbedingt ein Backup! Änderungen an der Datenbank sind immer mit absoluter Vorsicht zu genießen, tu das nur, wenn Du dich damit auskennst!

Beim nächsten Beispiel haben wir keinen Zugriff mehr auf den Shop.

Im Beispiel siehst Du als Meldung "Access denied for user '*****'@'localhost' (using passwort: YES)", das bedeutet, dass die Zugangsdaten nicht stimmen. Im Stack Trace findest Du folgende Information:

Enlight_Components_Db_Adapter_Pdo_Mysql->_connect()

Das lässt darauf deuten, dass die Zugangsdaten nicht stimmen, wenn sich etwas mit der Datenbank verbinden will, also sind Deine Zugangsdaten in der config.php nicht korrekt.

Wie kann ich während der Entwicklung debuggen?

Debugging während der Entwicklung ist ein wichtiger Schritt, um zum Beispiel bei eigenen Programmierungen im Fehlerfall zu schauen, woran es liegen kann.

Fürs weiterführende Debuggen haben wir einen separaten Artikel verfasst, der Dir alles nötige vermittelt: Klicke hier.

Weitere interessante Artikel:

Die Shopware Bestell-Tabellen

Einleitung In diesem Artikel findest Du eine Übersicht über die Bestell-Tabellen in Shopware, die einzelnen Spalten und Foreign Keys zu anderen Tabellen. Grundsätzlich sind in Shopware die Bestellungen in den Tabellen aus dem Bereich...

weiterlesen

Performance Tipps Shopware

Allgemeine Tipps {| |- ! Topic !! Standard !! Optimal !! Info |- | PHP-Version || - || 7.0.x || PHP 7.0.x bietet je nach Szenario eine zwischen 25 - 30 % höhere Ausführungsgeschwindigkeit (PHP-Stack) |- | Bytecode-Cache || APC ||...

weiterlesen

Die Shopware Kunden-Tabellen

Einleitung In diesem Artikel findest Du eine Übersicht über die Bestell-Tabellen in Shopware, die einzelnen Spalten und Foreign Keys zu anderen Tabellen. Grundsätzlich sind in Shopware die Bestellungen in den Tabellen aus dem Bereich...

weiterlesen
€ 1,00

Preise inkl. gesetzlicher
MwSt. + Versandkosten*