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?

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.


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.


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 :-)


Você está certo. Eu testei o código. Se colocarmos como Mage :: log ('minha string'. $ Array); isso imprimirá 'my stringArray'
Sukeshini 30/09
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.