Jak wydrukować zawartość tablicy w pliku dziennika?

18

Jak wydrukować zawartość tablicy do pliku dziennika w Magento CE 1.7 bez iteracji przez pętlę?

Sukeshini
źródło

Odpowiedzi:

26
Mage::log(print_r($arr, 1), null, 'logfile.log');

Dodanie drugiego parametru do print_r zwróci ciąg z wydrukowaną zmienną.
[EDYCJA]
na podstawie poniższych komentarzy Czuję się zobowiązany do zaoferowania innych opcji logowania tablicy.

Mage::log($arr, null, 'logfile.log');

lub jeśli potrzebujesz prefiksu łańcucha do tablicy

Mage::log('prefix'.Zend_Debug::dump($arr, null, false), null, 'logfile.log');

Drugi parametr Zend_Debug::dump()to etykieta. Jeśli tak nie nulljest, zostanie dodany przed zrzutem tablicy.
Trzeci parametr Zend_Debug::dump()średnich echo. Jeśli tak, truewynik zrzutu zostanie powtórzony, jeśli falsezostanie zwrócony jako ciąg. W twoim przypadku musisz tak być false.

Marius
źródło
Dzięki. Działa idealnie. Myślę, że przegapiłeś przecinek między parametrami funkcji print_r. Zamiast tego był kropka.
Sukeshini
@ Su123 Tak ... Widziałem to. Naprawiono to teraz
Marius
6
Nie powinieneś print_rtutaj potrzebować , logger Magento automatycznie rozszerzy tablice i obiekty
Alan Storm
Jeśli nalegasz na użycie print_r, lepszym wyborem może być użycie Zend_Debug::dump($var).
pspahn
@Alan Storm: Dzięki. Przetestowałem twoją sugestię. Działa idealnie.
Sukeshini,
11

Czy próbowałeś zrobić tylko:

Mage::log($array, null, 'logfile.log', true);

Metoda dziennika magów powinna samodzielnie rozszerzyć tablicę.

Petar Dzhambazov
źródło
Wielkie dzięki. Zadziałało. Nie wiem, dlaczego to nie działało wcześniej, kiedy sprawdzałem.
Sukeshini,
8

Jak zauważył Petar, jest on rozwinięty, więc jeśli jest to tablica lub obiekt, nie ma potrzeby print_r. Ale jeśli go wymieszasz, na przykład:

Mage::log('my string' . $array);

pojawia się problem, ponieważ konwersja tablicy phps na ciąg znaków oznacza:

array(... whatever...) -> 'String'

I z obiektem php próbuje wywołać metodę __toString, jeśli to nie istnieje, generowany jest błąd (myślę).

Dla porównania Mage::log():

\Mage::log
/app/Mage.php:784
public static function log($message, $level = null, $file = '', $forceLog = false)
{
    // ...
    // initialize ... blah stuff...
    // check wether logging is on, developer mode or logging is forced

    try {
        // get the file, define the format... more stuff ... blah ...

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

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

Nic nie testowałem :-)

Fabian Blechschmidt
źródło
Masz rację. Przetestowałem kod. Jeśli wstawimy jak Mage :: log („mój ciąg”. $ Tablica); to wypisze „my stringArray”
Sukeshini,