Logs schreiben in Contao 3 & 4 (Logging)

von Marco Simbürger

Contao 3

Einen Log-Eintrag in Contao 3 zu erstellen ist ganz einfach. Man ruft dazu lediglich die statische Methode log() aus der Klasse System.php auf. Diese Methode erwartet einen Log-Text, einen Methoden-Namen (aus welcher Methode wurde dieser Log-Eintrag erstellt) und eine Log-Kategorie (siehe unten).

public static function log($strText, $strFunction, $strCategory){ //... }

Damit kann nun ganz einfach überall in Contao (Modul, Template usw.) ein Log-Eintrag generiert werden, der dann in den System-Logs von Contao erscheint.

Beispiel:

\System::log('Ein Log-Eintrag '.$variableXY, __CLASS__.'::'.__FUNCTION__, TL_GENERAL);

Contao 4

Ab Contao 4 sollte man den Logger-Service von Symfony verwenden. Das Logging, wie oben für Contao 3 beschrieben, ist ab Contao 4.2 deprecated und wird ab Contao 5 komplett entfernt!

use Psr\Log\LogLevel;
use Contao\CoreBundle\Monolog\ContaoContext;

// ...

\System::getContainer()
      ->get('monolog.logger.contao')
      ->log(LogLevel::INFO, 'Ein Log-Eintrag', array(
      'contao' => new ContaoContext(__CLASS__.'::'.__FUNCTION__, TL_GENERAL
      )));

Übersicht der verfügbaren LogLevels hier: PSR LogLevel

Allgemeine Informationen zum Logging

__CLASS__
Magische Konstante, wird mit dem Namen der Klasse ersetzt.

__FUNCTION__
Magische Konstante, wird mit dem Namen der Funktion ersetzt.

 

Wie oben schon erwähnt, gibt es noch verschiedene Log-Kategorien. Diese sind in /system/config/constants.php definiert. Zur Zeit sind folgende Log-Kategorien definiert:

TL_ERROR – An error message.
TL_ACCESS – A message that relates to the access.
TL_GENERAL – A general message.
TL_FILES – A message that relates to the files.
TL_CRON – A message that relates to the cron jobs.
TL_FORMS – A message that relates to the forms.
TL_CONFIGURATION – A message that relates to the configuration.
TL_NEWSLETTER – A message that relates to the newsletter.
TL_REPOSITORY – A message that relates to the extension repository.

Zurück

Kommentare

Kommentar von THomas |

Hallo, vielen Dank schonmal für deine Übersicht.
Ich benutze den Logging-Service und der Log wird auch intern gespeichert (zu sehen mittels getLog()), allerdings nicht in die .log geschrieben. Muss dafür noch irgendeine Einstellung getroffen werden? Ich habe sowohl den monolog.logger.contao und den logger Service getestet.

Folgende Umgebung:
Contao 4.4.2 Managed Edition
Symfony 3.3.6
Es wurden keinerlei Einstellung zum Logger/Monolog geändert bzw. überhaupt angelegt.
Ich versuche, eine Notice von einem Bundle heraus auszugeben (habe es aber auch mit Error und Critical probiert).

Einen Kommentar schreiben

Bitte rechnen Sie 3 plus 3.