ログファイルの配列の内容を印刷する方法は?


回答:


26
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関数のパラメーター間のコンマを見逃したと思います。代わりに、フルストップがありました。
スケシニ

@ Su123うん...それを見た。現在修正済み
マリウス

6
print_rここは必要ありません。Magentoのロガーは配列とオブジェクトを自動拡張します
アランストーム

あなたが使用を主張するならprint_r、より良い選択は使用するかもしれませんZend_Debug::dump($var)
pspahn

@アランストーム:ありがとう。あなたの提案をテストしました。完璧に機能します。
スケシニ

11

あなたはちょうどしようとしましたか:

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

Mageログメソッドは、配列自体を拡張する必要があります。


どうもありがとう。動いた。私がチェックしたときに、それが以前に動作しなかった理由がわかりません。
スケシニ

8

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) {
    }
}

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


あなたは正しいです。コードをテストしました。Mage :: log( 'my string'。$ array);のように配置すると、これは 'my stringArray'を出力します
スケシニ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.