Shopware

Shopware-Logdateien verwalten: was in var/log liegt, warum es wächst und wie Sie es begrenzen

Shopware schreibt im Produktivmodus je Tag eine Logdatei und löscht in der Standardkonfiguration keine davon. Dazu kommen dev.log ohne Rotation und Ereignis-Logs in der Datenbank. Was wo liegt, wer aufräumt und wie Sie var/log mit einer Zeile Konfiguration begrenzen, nachgestellt in Shopware 6.6 und 6.7.

Pixup MediaVeröffentlicht am 7 Min. Lesezeit
Fenster mit dem Verzeichnis var/log: die neue Datei prod-2026-11-11.log, darunter ältere Tagesdateien, die alle liegen bleiben. Hervorgehoben: Mit max_files: 14 bleiben 14 Dateien übrig. Etikett: Standard unbegrenzt.
In der Standardkonfiguration löscht Shopware keine Logdatei. Nachgestellt am 11.11.2026 in 6.6.10.6 und 6.7.2.2.
Grafik in voller Größe öffnen

Ein Shopware-Shop schreibt Logs an zwei Orte: in Dateien unter var/log und in eine Tabelle der Datenbank. Für die Datenbank räumt Shopware selbst auf. Für die Dateien tut es das in der Standardkonfiguration nicht. Das merkt man meist erst, wenn der Speicherplatz knapp wird oder jemand fragt, wie lange Logs eigentlich aufbewahrt werden.

Wie Sie eine einzelne Fehlerzeile finden und lesen, beschreibt der Ratgeber Shopware zeigt einen Fehler 500. Hier geht es um Ablage, Rotation, Aufbewahrung und Speicherplatz.

Die Log-Konfiguration haben wir im Kern von Shopware 6.6.10.6 und 6.7.2.2 gelesen und mit den Versionen 6.6.10.30 und 6.7.16.0 abgeglichen; sie ist in allen vier gleich. Das Verhalten haben wir am 11.11.2026 in Wegwerf-Containern beider Versionen im Produktivmodus nachgestellt. Beide verhielten sich gleich.

Zwei Orte, zwei Regeln

OrtWas dort stehtWer räumt auf
var/log/prod-JJJJ-MM-TT.logFehler ab Ebene error, Produktivmodusniemand, in der Standardkonfiguration
var/log/dev.logalles ab Ebene debug, Entwicklungsmodusniemand, die Datei wird nicht rotiert
Tabelle log_entryEreignis-Logs, z. B. Flow-Ereignisse und fehlgeschlagene Mailsgeplante Aufgabe log_entry.cleanup

Nicht in dieser Tabelle stehen die Logs von Webserver und PHP. Sie liegen beim Hosting, und dort gelten dessen Regeln.

Was im Produktivmodus in die Datei kommt

Mit APP_ENV=prod sammelt Shopware die Meldungen einer Anfrage zunächst im Speicher. Erst wenn eine Meldung der Ebene error oder höher dazukommt, schreibt es in die Datei, und auch dann nur Einträge ab error. Hinweise und Warnungen bleiben draußen. Das hält die Dateien klein.

Drei Dinge fehlen deshalb im Log, obwohl man sie dort vermuten würde:

  • Seiten, die es nicht gibt. Die Ausnahme für den Status 404 steht in Shopwares Ausschlussliste. In unserem Test hinterließ der Aufruf einer nicht vorhandenen Adresse keinen Eintrag.
  • Erwartbare Fehler. Für eine Reihe von Fehlercodes setzt Shopware die Ebene auf notice herab, darunter falsche Anmeldedaten im Kundenkonto und abgebrochene Zahlungen. Im Produktivmodus erscheinen sie damit nicht mehr in der Datei.
  • Fehler vor Shopware. Scheitert eine Anfrage am Webserver oder an PHP selbst, schreibt Shopware nichts.

Fehler auf der Kommandozeile landen dagegen in derselben Datei. Ein unbekannter Befehl erzeugte in unserem Test diesen Eintrag (gekürzt):

[2026-11-11T13:12:38+00:00] console.CRITICAL: Error thrown while running command "'pixup:gibt-es-nicht'". Message: "There are no commands defined in the "pixup" namespace."

Die Datei hieß prod-2026-11-11.log. Eine Datei entsteht nur an Tagen, an denen etwas geschrieben wird. An einem Tag ohne Fehler gibt es keine.

Warum var/log trotzdem wächst

Für den Produktivmodus richtet Shopware einen Handler vom Typ rotating_file ein. „Rotierend“ heißt hier: je Tag eine neue Datei. Eine Obergrenze für die Zahl der Dateien setzt die Konfiguration im Kern nicht. Dann gilt der Standardwert des MonologBundles, und der ist 0. Für Monolog bedeutet 0: unbegrenzt.

In unserem Test haben wir 20 ältere Tagesdateien angelegt und danach einen Fehler ausgelöst. Es entstand die Datei des aktuellen Tages, gelöscht wurde nichts. Am Ende lagen 22 Dateien im Verzeichnis: die 20 angelegten, eine, die schon im Container-Image lag, und die neue. In 6.6.10.6 und in 6.7.2.2 war das Ergebnis gleich.

Ein Shop mit wenigen Fehlern merkt davon lange nichts. Bei einem Shop, der täglich Fehler schreibt, etwa durch ein fehlerhaftes Plugin, wächst das Verzeichnis jeden Tag weiter.

Ein Wert, der nichts bewirkt

In der Shopware-Konfiguration steht unter shopware.logger der Wert file_rotation_count: 14. Der Name legt nahe, dass er die Zahl der Logdateien begrenzt. Im Code von 6.6.10.6 und 6.7.2.2 und im Quelltext von 6.7.16.0 wird der Wert aber nur deklariert; keine andere Stelle liest ihn. Wer ihn ändert, ändert an var/log nichts.

Die Zahl der Dateien begrenzen

Die Grenze setzen Sie in der Monolog-Konfiguration Ihres Projekts. Legen Sie die Datei config/packages/prod/monolog.yaml an oder ergänzen Sie sie:

monolog:
    handlers:
        nested:
            max_files: 14

nested ist der Name, den Shopware dem schreibenden Handler im Kern gibt. Ihre Angabe ergänzt dessen Einstellungen, der Rest bleibt, wie er ist. Danach den Cache leeren:

bin/console cache:clear

In unserem Test lagen nach dem nächsten Fehlereintrag noch 14 Dateien im Verzeichnis: die Datei des aktuellen Tages und die 13 jüngsten älteren. Die übrigen, auch die aus dem Image, waren gelöscht.

Drei Dinge sollten Sie dabei wissen:

  1. Gezählt werden Dateien, nicht Tage. Weil an fehlerfreien Tagen keine Datei entsteht, reichen 14 Dateien oft deutlich weiter zurück als 14 Tage.
  2. Aufgeräumt wird beim Anlegen einer neuen Datei. Das passiert mit dem ersten Eintrag eines Tages. Die Grenze wirkt also nicht sofort nach dem Deployment, sondern beim nächsten Fehler an einem neuen Tag.
  3. Sortiert wird nach Dateinamen. Gelöscht werden die ältesten Dateien, die zum Muster prod- plus Datum passen. Andere Dateien in var/log bleiben unberührt.

Die Konfigurationsdatei gehört ins Projekt-Repository, damit sie beim nächsten Deployment nicht verloren geht. Hat Ihr Shop bereits eine eigene Monolog-Konfiguration oder rotiert Ihr Hosting var/log selbst, etwa mit logrotate, stimmen Sie beides ab. Sonst greifen zwei Regeln auf dieselben Dateien zu.

Ereignis-Logs in der Datenbank

Ein Teil der Logs landet nicht in einer Datei, sondern in der Tabelle log_entry. In der Administration finden Sie ihn unter Einstellungen > System > Ereignis-Logs. Dorthin schreibt Shopware unter anderem Flow-Ereignisse mit einer Logstufe und fehlgeschlagene Mails.

Für diese Tabelle gibt es eine eigene Aufräumregel. Die geplante Aufgabe log_entry.cleanup läuft täglich und löscht:

EinstellungStandardwertWirkung
core.logging.entryLifetimeSeconds2678400 (31 Tage)ältere Einträge werden gelöscht
core.logging.entryLimit10000000darüber hinaus werden die ältesten gelöscht

Der Wert -1 schaltet die jeweilige Regel ab. Beide Standardwerte haben wir in 6.6.10.6 und 6.7.2.2 direkt in der Datenbank gelesen.

Das Aufräumen funktioniert nur, wenn die geplanten Aufgaben laufen. Steht der Scheduled-Task-Runner, wächst auch die Tabelle log_entry ohne Grenze. Woran das liegen kann, beschreibt Warum ein Scheduled Task nicht läuft.

Speicherplatz prüfen

Diese Befehle lesen nur und ändern nichts. Sie laufen im Hauptverzeichnis des Shops:

du -sh var/log
ls -lh var/log | tail -n 20
ls var/log | grep -c '^prod-'

Der erste zeigt die Größe des Verzeichnisses, der zweite die letzten Dateien mit Größe, der dritte die Zahl der Tagesdateien. Ist eine einzelne Tagesdatei auffällig groß, lohnt ein Blick hinein. Oft wiederholt sich derselbe Fehler tausendfach. Dann ist nicht das Log das Problem, sondern der Fehler.

Läuft der Datenträger voll, kann Shopware gar nicht mehr schreiben, auch kein Log. Ein Fehler 500 ohne Logeintrag kann genau das bedeuten.

Kurz geprüft

  • Größe von var/log und Zahl der prod-Dateien einmal messen.
  • APP_ENV im laufenden Shop auf prod prüfen. dev.log hat keine Grenze.
  • max_files für den Handler nested setzen und die Datei ins Repository aufnehmen.
  • Mit dem Hosting klären, ob dort zusätzlich rotiert wird.
  • Prüfen, ob die geplanten Aufgaben laufen, damit log_entry aufgeräumt wird.
  • Aufbewahrungsfrist mit der für Datenschutz zuständigen Person festlegen.

Shopware schreibt im Produktivmodus eine Logdatei je Tag mit Fehlern und löscht in der Standardkonfiguration keine. Eine Zeile max_files begrenzt das. Die Ereignis-Logs in der Datenbank räumt Shopware selbst auf, solange die geplanten Aufgaben laufen.

Wer die Logs seines Shops nicht selbst im Blick behalten will: Auf der Seite Shopware Support beschreiben wir, wie wir Shops betreuen.

Häufige Fragen

Darf ich alte Dateien in var/log einfach löschen?
Ältere Tagesdateien der Form prod-JJJJ-MM-TT.log braucht Shopware zum Betrieb nicht. Sichern Sie vorher, was Sie für eine laufende Fehlersuche noch brauchen, und lassen Sie die Datei des aktuellen Tages stehen. Dauerhaft besser ist eine Obergrenze per max_files, dann muss niemand mehr von Hand löschen.
Ich habe file_rotation_count geändert, aber es passiert nichts. Warum?
Der Wert steht in der Shopware-Konfiguration unter shopware.logger und ist auf 14 voreingestellt. In 6.6.10.6, 6.7.2.2 und 6.7.16.0 liest ihn aber keine Stelle im Code. Die Zahl der Logdateien steuert allein max_files in der Monolog-Konfiguration.
Warum steht ein Fehler aus dem Shop nicht im Log?
Im Produktivmodus landen nur Meldungen ab der Ebene error in der Datei. Einige erwartbare Fehler stuft Shopware auf notice herab, etwa falsche Anmeldedaten im Kundenkonto. Seiten, die es nicht gibt (404), schreibt Shopware gar nicht ins Log. Und scheitert die Anfrage vor Shopware, steht die Meldung im Log von Webserver oder PHP.
Wo sehe ich die Ereignis-Logs?
In der Administration unter Einstellungen > System > Ereignis-Logs. Sie liegen in der Datenbanktabelle log_entry, nicht in var/log. Dort landen etwa Flow-Ereignisse und fehlgeschlagene Mails.
Wie lange sollte ich Logs aufbewahren?
Das hängt davon ab, wie weit Sie bei einer Fehlersuche zurückschauen müssen und was Ihr Datenschutzkonzept vorsieht. Logzeilen können personenbezogene Daten enthalten. Die Frist legen Sie deshalb mit der für Datenschutz zuständigen Person fest, nicht allein nach dem Speicherplatz.
WeiterführendShopware Support

Verwandte Inhalte

Alle Wissensartikel
Shopware · 7 Min.

Shopware zeigt einen Fehler 500: wo die Ursache steht und was Sie Ihrem Dienstleister schicken

Bei einem Fehler 500 sehen Besucher nur „An Error Occurred“. Die eigentliche Meldung steht meist im Shopware-Log — in einer Datei je Tag, mit Uhrzeit in UTC — und manchmal nur im Log von Webserver oder PHP. Wie Sie sie finden, lesen und weitergeben, nachgestellt in Shopware 6.6 und 6.7.

LesenGeprüft am
Automation & AI · 7 Min.

Warum ein Scheduled Task nicht läuft

Der Zustand skipped blockiert nichts — der Scheduler nimmt solche Aufgaben mit. Wirklich fest hängt eine Aufgabe in running, und dann zwölf Stunden lang.

LesenGeprüft am
Shopware · 8 Min.

Shopware-Update-Checkliste: vorbereiten, durchführen, nachprüfen

Ein Shopware-Update besteht aus zwei Update-Befehlen, eingerahmt vom Wartungsmodus — und aus allem, was davor und danach geprüft werden muss. Die Checkliste in der Reihenfolge, in der sie abgearbeitet wird, mit dem, was system:update:finish tatsächlich tut.

LesenGeprüft am