質問

ループを繰り返すことなく、Magento CE 1.7のログファイルに配列の内容を印刷する方法は?

役に立ちましたか?

解決

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 配列ダンプの前に追加されます。
の3番目のパラメーター Zend_Debug::dump() 意味 echo. 。もし true その後、ダンプ結果はエコーされます。 false 文字列として返されます。あなたの場合、あなたはそれが必要です false.

他のヒント

あなたはただやろうとしましたか:

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

Mage Logメソッドは、Arrayを自己拡張する必要があります。

Petarが指摘したように、それは拡張されているので、それが配列またはオブジェクトである場合、print_rは必要ありません。しかし、あなたがそれを混ぜるなら、

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

PHPSアレイから文字列変換は次のことを意味するため、問題が発生します。

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

また、オブジェクトを使用すると、PHPはこれが存在しない場合は__toStringメソッドを呼び出そうとします。エラーがスローされます(私は思う)。

そして参考のために、 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) {
    }
}

何もテストされていません:-)

ライセンス: CC-BY-SA帰属
所属していません magento.stackexchange
scroll top