Respostas:
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, null
ele será adicionado antes do despejo da matriz.
O terceiro parâmetro de Zend_Debug::dump()
médias echo
. Se for, true
o resultado do dump será ecoado; se for false
, será retornado como uma string. No seu caso, você precisa que seja false
.
print_r
aqui, o logger do Magento irá autoexpandir matrizes e objetos #
print_r
, uma escolha melhor pode ser usar Zend_Debug::dump($var)
.
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.
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 :-)