¿Cómo imprimir el contenido de la matriz en el archivo de registro?

18

¿Cómo imprimir el contenido de la matriz en un archivo de registro en magento CE 1.7 sin iterar a través de un bucle?

Sukeshini
fuente

Respuestas:

26
Mage::log(print_r($arr, 1), null, 'logfile.log');

Agregar un segundo parámetro a print_r devolverá una cadena con variable impresa.
[EDITAR]
basado en los comentarios a continuación, me siento obligado a ofrecer otras opciones para registrar una matriz.

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

o si necesita un prefijo de cadena para la matriz

Mage::log('prefix'.Zend_Debug::dump($arr, null, false), null, 'logfile.log');

El segundo parámetro de Zend_Debug::dump()es una etiqueta. Si no es nullasí, se agregará antes del volcado de la matriz.
El tercer parámetro de Zend_Debug::dump()medias echo. Si es así, trueel resultado del volcado se repetirá, si es falseasí, se devolverá como una cadena. En tu caso necesitas que sea false.

Marius
fuente
Gracias. Funcionó perfectamente. Creo que te has perdido la coma entre los parámetros de la función print_r. En cambio, hubo un punto final.
Sukeshini
@ Su123 Sí ... lo vi. Ya está arreglado
Marius
66
No debería necesitar el print_raquí, el registrador de Magento expandirá automáticamente los arreglos y los objetos
Alan Storm
Si insiste en usar print_r, una mejor opción podría ser usar Zend_Debug::dump($var).
pspahn
@ Alan Storm: Gracias. Probé tu sugerencia. Funciona perfectamente
Sukeshini
11

¿Has intentado hacer solo:

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

El método de registro de mago debería expandir la matriz por sí mismo.

Petar Dzhambazov
fuente
Muchas gracias. Funcionó. No sé por qué no funcionó antes cuando lo verifico.
Sukeshini
8

Como señaló Petar, se expande, por lo que si se trata de una matriz o un objeto, no se necesita print_r. Pero si lo mezclas, como:

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

tiene un problema, porque la conversión de matriz phps a cadena significa:

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

Y con un objeto, php intenta llamar al método __toString si esto no existe, se produce un error (creo).

Y para referencia 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 probado :-)

Fabian Blechschmidt
fuente
Estás en lo correcto. Probé el código. Si ponemos como Mage :: log ('mi cadena'. $ Array); esto imprimirá 'my stringArray'
Sukeshini