Como imprimir o conteúdo da matriz no arquivo de log?

18

Como imprimir o conteúdo da matriz em um arquivo de log no magento CE 1.7 sem iterar através de um loop?

Sukeshini
fonte

Respostas:

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

Adicionar um segundo parâmetro ao print_r retornará uma string com a variável impressa.
[EDIT] com
base nos comentários abaixo, sinto-me obrigado a oferecer outras opções para registrar uma matriz.

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

ou se você precisar de um prefixo de string para a matriz

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

O segundo parâmetro de Zend_Debug::dump()é um rótulo. Caso contrário, nullele será adicionado antes do despejo da matriz.
O terceiro parâmetro de Zend_Debug::dump()médias echo. Se for, trueo resultado do dump será ecoado; se for false, será retornado como uma string. No seu caso, você precisa que seja false.

Marius
fonte
Obrigado. Funcionou perfeitamente. Eu acho que você perdeu a vírgula entre os parâmetros da função print_r. Em vez disso, houve um ponto final.
Sukeshini 29/09
@ Su123 Sim ... eu vi isso. Está consertado agora
Marius
6
Você não precisa do print_raqui, o logger do Magento irá autoexpandir matrizes e objetos #
Alan Storm
Se você insistir em usar print_r, uma escolha melhor pode ser usar Zend_Debug::dump($var).
Pspahn
@ Alan Storm: Obrigado. Eu testei sua sugestão. Funciona perfeitamente.
Sukeshini 30/09
11

Você já tentou fazer exatamente:

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

O método de log do Mage deve expandir a matriz por si próprio.

Petar Dzhambazov
fonte
Muito obrigado. Funcionou. Não sei por que não funcionou mais cedo quando verifico.
Sukeshini 30/09
8

Como Petar apontou, ele é expandido; portanto, se for uma matriz ou um objeto, não haverá print_r necessário. Mas se você misturar, como:

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

você tem um problema, porque a conversão de matriz phps em string significa:

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

E com um objeto, o php tenta chamar o método __toString se isso não existir, um erro é gerado (eu acho).

E para referência 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) {
    }
}

Nada testado :-)

Fabian Blechschmidt
fonte
Você está certo. Eu testei o código. Se colocarmos como Mage :: log ('minha string'. $ Array); isso imprimirá 'my stringArray'
Sukeshini 30/09