回答:
Mage::log(print_r($arr, 1), null, 'logfile.log');
2番目のパラメーターをprint_rに追加すると、印刷された変数を含む文字列が返されます。
[編集]
以下のコメントに基づいて、アレイをログに記録するための他のオプションを提供する義務があると感じています。
Mage::log($arr, null, 'logfile.log');
または、配列の文字列プレフィックスが必要な場合
Mage::log('prefix'.Zend_Debug::dump($arr, null, false), null, 'logfile.log');
の2番目のパラメーターZend_Debug::dump()
はラベルです。そうでない場合null
、配列ダンプの前に追加されます。
三番目のパラメータZend_Debug::dump()
手段echo
。その場合true
、ダンプ結果がエコーされ、false
それがストリングとして返されます。あなたの場合、それが必要false
です。
print_r
ここは必要ありません。Magentoのロガーは配列とオブジェクトを自動拡張します
print_r
、より良い選択は使用するかもしれませんZend_Debug::dump($var)
。
あなたはちょうどしようとしましたか:
Mage::log($array, null, 'logfile.log', true);
Mageログメソッドは、配列自体を拡張する必要があります。
Petarが指摘したように、展開されるため、配列またはオブジェクトの場合、print_rは必要ありません。ただし、次のように混ぜると:
Mage::log('my string' . $array);
phps配列から文字列への変換が意味するため、問題が発生します。
array(... whatever...) -> 'String'
そして、オブジェクトを使用すると、phpは、__ toStringメソッドが存在しない場合、_totoStringメソッドを呼び出そうとし、エラーがスローされます(私は思う)。
また、参考までに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) {
}
}
何もテストされていません:-)