Fehlersuche mit Mage::Log()



Oft können Sie, z.B. bei Magento-Modulen, Klassen und AJAX-Aufrufen, keine Funktionstests mit einem einfachen “ECHO” ausführen. Man muss die Ergebnisse der Funktionen in ein Logfile schreiben und auswerten. Magento bietet dafür in der Klasse Mage die Funktion log().

Datei: app\Mage.php

    /**
     * log facility (??)
     *
     * @param string $message
     * @param integer $level
     * @param string $file
     */
    public static function log($message, $level=null, $file = '')
    {
        if (!self::getConfig()) {
            return;
        }
        if (!Mage::getStoreConfig('dev/log/active')) {
            return;
        }

        static $loggers = array();

        $level  = is_null($level) ? Zend_Log::DEBUG : $level;
        if (empty($file)) {
            $file = Mage::getStoreConfig('dev/log/file');
            $file   = empty($file) ? 'system.log' : $file;
        }

        try {
            if (!isset($loggers[$file])) {
                $logFile = Mage::getBaseDir('var').DS.'log'.DS.$file;
                $logDir = Mage::getBaseDir('var').DS.'log';

                if (!is_dir(Mage::getBaseDir('var').DS.'log')) {
                    mkdir(Mage::getBaseDir('var').DS.'log', 0777);
                }

                if (!file_exists($logFile)) {
                    file_put_contents($logFile,'');
                    chmod($logFile, 0777);
                }

                $format = '%timestamp% %priorityName% (%priority%): %message%' . PHP_EOL;
                $formatter = new Zend_Log_Formatter_Simple($format);
                $writer = new Zend_Log_Writer_Stream($logFile);
                $writer->setFormatter($formatter);
                $loggers[$file] = new Zend_Log($writer);
            }

            if (is_array($message) || is_object($message)) {
                $message = print_r($message, true);
            }

            $loggers[$file]->log($message, $level);
        }
        catch (Exception $e){

        }
    }



Der einfachste Aufruf erfolgt über:

Mage::log('Mein Log-Eintrag');
Mage::logException($Exception);

Das Ergebnis finden Sie bei einer Standard-Konfiguration unter var/log/system.log, oder var/log/exception.log bei Exceptions. Im Backend von Magento, unter “System -> Konfiguration ->Entwickleroptionen -> Log Einstellungen”, kann diese Funktion aktiviert werden und die Dateinamen für die Log-Files vorgegeben werden.



Alternativ kann man die Dateinamen auch mit dem Ausführen der Funktion log() steuern (Das gilt nicht für logException()). Dafür muss man lediglich den dritten Parameter beim Funktionaufruf mit angeben. Der Output wäre dann zum Beispiel wie folgt:

...
$productData['adminlog'] = $user->getName() . "; " . $roleName . "; " . $formated_date;
$loginfo = $productData['sku'] . " " . $productData['adminlog'];
Mage::log($loginfo, null, "logfile.log");
...

Der Inhalt der Log-Datei sieht dann wie folgt aus:

2010-07-02T07:39:47+00:00 DEBUG (7): MKN-CGE11 Johannes Teitge; Administrators; 01.07.2010 08:11:24
2010-07-02T07:44:42+00:00 DEBUG (7): MKN-CGE11 Johannes Teitge; Administrators; 02.07.2010 07:44:42

In diesem Sinne, wünschen wir weiterhin viel Erfolg beim aufspüren Ihrer Magento-Fehler.

  • Twitter
  • Webnews
  • Mister-Wong
  • Facebook
  • Digg
  • BlogMarks
  • Share/Save/Bookmark

Kommentar erstellen

You must be logged in to post a comment.

Bitte beachten: Mxperts.de ist kein Supportforum sondern eine Informationsplattform, deshalb benutzt für Diskussionen das deutsche Forum von Magento. (Fragen/Kommentare zu den Tutorials ausgeschlossen). Außerdem gebe ich keinen kostenlosen Support zu Magento. Leider haben das einige Leser in letzter Zeit falsch Verstanden und ich bitte um Euer Verständnis. Ich denke diese Plattform ist von unserer Seite aus schon genügend Gratis-Leistung.