Siempre es recomendable usar la herramienta de log para poder estar al tanto de los errores que se producen en nuestro Magento.

Para activarla entramos en:

Sistema > Configuración

Y en el menú de la izquierda entramos en AVANZADO > Desarrollador

Nos interesa la parte "Configuración de registro" que tenemos que habilitar en caso de no tenerla habilitada. Por defecto se usan los archivos system.log y exception.log

log magento

Con esta opción activada nuestro Magento empezará a escupir todos los errores que se produzcan a los archivos situados en:

var/log/system.log
y
var /log/exception.log

Una vez habilitada un caso frecuente es tener en system.log errores del tipo:

Warning: simplexml_load_string(): Entity: line 1: parser error : XML declaration allowed only at the start of the document  in /var/www/DOMAIN/httpdocs/lib/Varien/Simplexml/Config.php on line 510

El error indica que ha habido un error al parsear un archivo XML. El problema es que no sabemos qué archivo está produciendo los errores. En nuestro caso eran errores continuos, tanto que el archivo system.log ocupaba alrededor de 140MB!

Vemos en el log que el error se origina en la línea 510 del archivo:

lib/Varien/Simplexml/Config.php

que contiene algo como:

    /**
     * Imports XML string
     *
     * @param  string $string
     * @return boolean
     */
    public function loadString($string)
    {
        if (is_string($string)) {
            $xml = simplexml_load_string($string, $this->_elementClass);
            if ($xml instanceof Varien_Simplexml_Element) {
                $this->_xml = $xml;
                return true;
            }
        } else {
            Mage::logException(new Exception('"$string" parameter for simplexml_load_string is not a string'));
        }
        return false;
    }

para obtener más información de correo vamos a modificar esa función para que quede:

    /**
     * Imports XML string
     *
     * @param  string $string
     * @return boolean
     */
    public function loadString($string)
    {
        if (is_string($string)) {
            $xml = simplexml_load_string($string, $this->_elementClass);
            if(!$xml){
            	Mage::log('XML_ERROR: ' . $string);
            }
            if ($xml instanceof Varien_Simplexml_Element) {
                $this->_xml = $xml;
                return true;
            }
        } else {
            Mage::logException(new Exception('"$string" parameter for simplexml_load_string is not a string'));
        }
        return false;
    }

Simplemente le hemos dicho que en el log nos escupa la cadena que está produciendo el error de XML.

Es recomendable borrar el system.log para que Magento vuelva a generarlo y que sólo quede almacenada la información de los errores que se produzcan a partir de ahora.

Ahora simplemente tenemos que refrescar la página para que se vuelvan a producir y registrar los errores en nuestro system.log

Después reabrimos nuestro system.log y buscamos la cadena "XML_ERROR" que hemos insertado antes de cada error. En nuestro caso el error era un archivo de configuración de un módulo que contenía espacios delante de la declaración de XML.

  <?xml version="1.0" encoding="UTF-8"?>

quitamos los espacios y listo.

Tras los cambios podemos devolver la función que hemos modificado a su estado original.