Das TYPO3 Log ist eine zentrale anlaufstelle für Aktionen welche in der TYPO3 Installation durchgeführt werden. Hier wird festgehalten, wenn eine Extension installiert wird, ein Backend-User ein falsches Passwort eingegeben hat oder Daten gespeichert werden. Oft wird das „sys_log“ jedoch sehr groß und man sieht die Ursache nicht auf den ersten Blick. Dann geht es daran, das Log zu analyisieren und zu studieren um „den“ oder meistens „die“ Fehler einzugrenzen. Dabei ist folgendes Vorgehen zu empfehlen.
Log strukturiert reduzieren
Die strukturierte und dauerhafte Reduzierung unwichtiger Daten erledigt inzwischen der Scheduler Task „Table garbage collection“ ab TYPO3 4.6. Dieser Scheduler Task kann die Tabelle in einem fest definierten Abstand auf eine festgelegte Anzahl von Tagen reduzieren. Erfahrungswert für ein gut handhabbares Log, ist die täglich Reduzierung aller Einträge welche älter als 90 Tage sind. Um den Task benutzen zu können muss der Scheduler richtig konfiguriert werden. Für Ältere Installationen sollte das Log manuell (per SQL Befehl) reduziert werden, sodass man keine unwichtigen Daten analysiert.
Update 2012/07: Die Alternative zu dem oben genannten Scheduler Task, ist es das Log manuell zu reduzieren. Dazu kann folgende SQL Query ausgeführt werden, die Einträge entfernt, welche älter als 30 Tage sind:
DELETE FROM sys_log WHERE tstamp < UNIX_TIMESTAMP()-60*60*24*30;
sys_log Abfragen
Um „normale“ Log-Einträge aus der Betrachtung zu entfernen, wird dazu am besten eine manuelle SQL Query abgeschickt, mit der sich die gröbsten Fehler auffinden lassen. Diese Abfrage listet alle Fehler-Details anhand ihrer Eintrittshäufigkeit:
SELECT details, count( * ) c FROM sys_log WHERE error >0 GROUP BY details ORDER BY c DESC LIMIT 0 , 100;
Es wird empfohlen diese Abfrage in einer MySQL Konsole durchzuführen, sodass man die gesamten Details angezeigt bekommt. PhpMyAdmin im TYPO3 Backend schneidet diese Details nämlich ab. Doch wonach muss nun Ausschau gehalten werden…
sys_log analysieren
Beim Analysieren muss nun auf folgende Faktoren geachtet werden:
Häufigkeit: Je öfters ein Fehler zu finden ist, desto höher ist die Priorität den Fehler zu vermeiden. Gerade Fehler welche bei jedem Seitenaufruf auftreten, machen durch das loggen nicht nur das Frontend langsamer, sondern auch schnell das sys_log voll. Ort: Der Ort des Fehlers gibt Informationen darüber wie leicht sich der Fehler beseitigen lässt. Core Fehler können manchmal durch ein Update beseitigt werden. Wenn nicht können Core Fehler weiter geprüft werden und ähnlich wie Fehler in Fremd-Extensions in Bugtrackern (vgl. Forge) gemeldet werden. Fehler in eigenen Erweiterungen sollten umgehend behoben werden. Log Typ: Die Fehler können vom Typ WEB, BE, FE oder ohne einen Präfix vorliegen (z.B. Fehlerhafte Logins). Priorität haben natürlich WEB und FE um eine fehlerfreie Webseite zu garantieren. BE Fehler sollten hinten anstehen, aber dennoch behoben werden. Fehler Typ: Der Typ des Fehlers gibt Hinweise auf die Auswirkung und Schwere des Fehlers. Bei einer „Uncaught TYPO3 Exception“ wird z.B. das Laden der Seite unterbrochen (schwerer Fehler) und bei einem „PHP Warning“ nicht. Letzteres ist mehr wie ein Hinweis zu verstehen (Seite noch bedienbar).
Alle Faktoren sollten berücksichtigt werden um die Fehler Stück für Stück zu eliminieren. Bei der Beseitigung des Fehler hilft manchmal noch ein Blick in die Spalte „log_data“, um weitere Informationen zu dem Fehlverhalten zu bekommen (die Informationen liegen serialisiert vor (PHP serialize).
Fehler korrigiert! Und jetzt?
Nachdem ein Fehler, welcher im sys_log zu finden ist, korrigiert wurde, empfiehlt es sich, diese aus dem Log zu entfernen. Dadurch lässt sich leichter nachvollziehen ob der Fehler erneut auftritt und ob sich die Häufigkeit reduziert. Das Log von TYPO3 ist ein guter Indikator für eine stabile Webseite. Ab Log-Größen welche in dem GigaByte-Bereich liegen, hat eine Bereinigung dessen (und die Korrektur der Fehler) auch einen Performance-Gewinn zur Folge. Es kann durchaus Fehler geben, welche mehrfach bei jedem Request auftreten und entsprechend das Log „fluten“.
Wie geht ihr bei dem Log vor?
Dieser Beitrag wurde aus meinem alten Blog 1:1 übernommen, da ich den Blog eingestellt habe.