Error log record number – Cómo identificar el problema

Si algo puede ir mal, seguramente dará” – Ley de Murphy

Ya que el error es inevitable, necesitamos aprender a lidiar con él. Y el mejor camino para solucionar un problema es identificar su causa. Puede parecer obvio dicho de esa manera, pero hay mucha gente que se preocupa en tratar sólo los síntomas y sus efectos colaterales, descuidando así sus orígenes.

Vamos a ver en este post como Magento crea los archivos de registro, y cómo podemos interpretar la información generada.

Error log record number

Hasta la versión 1.3.2.4, siempre que el sistema presentaba un problema inesperado, el mismo era enviado al navegador, exponiendo así toda fragilidad del sitio a quien estuviera navegando.

De esa manera entonces usted tenía dos problemas. El error inesperado, y una brecha en la seguridad que podría ser explotada por algún hacker de turno.

A partir de la versión 1.4.x Magento presentó mejoras en el tratamiento de errores.

There has been an error processing your request
Exception printing is disabled by default for security reasons.
Error log record number: 1000038750

Bueno, resumir el mensaje de error no es bien la mejora que todos esperaban, pero disminuye los riesgos de ataques externos explorando las fallas que causaron el problema.

Interpretando el mensaje

Mucha gente cree que el problema es identificado por el número de registro presentado. Y buscan en los foros y grupos de ayuda una solución para el error de número xxx. Y no es así que funciona. Haciendo una traducción libre y adaptada de la página de error, tendremos un mensaje que dice:

Deu mierda al procesar su solicitud de página
El error no aparecerá en esta página por seguridad.
VEA el archivo de registro con el número: xxxxxxxxxxx

Este número es aleatorio, probablemente basado en un contador cronológico como un timestamp. Este número sólo sirve para que pueda encontrar el archivo.

Siempre que aparezca esta pantalla de error, puede encontrar un archivo (sin extensión) en su directorio de instalación de Magento, en la carpeta “var/report/“. Sólo tienes que abrir el archivo mediante un editor de texto.

Identificando el problema

Una vez que abra el archivo, una secuencia de información debe mostrarse. La primera vista puede parecer ser algo indeseable, pero con el tiempo y algunos consejos usted será capaz de resolver la mayoría de ellos.

a:5:{i:0;s:220:"SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ') AND (stock_id=1)' at line 2";i:1;s:5650:"#0 /Su directorio de instalacion/lib/Zend/Db/Statement.php(300): Zend_Db_Statement_Pdo->_execute(Array)
#1 /Su directorio de instalacion/lib/Zend/Db/Adapter/Abstract.php(468): Zend_Db_Statement->execute(Array)
#2 /Su directorio de instalacion/lib/Zend/Db/Adapter/Pdo/Abstract.php(238): Zend_Db_Adapter_Abstract->query('SELECT `catalog...', Array)
#3 /Su directorio de instalacion/lib/Varien/Db/Adapter/Pdo/Mysql.php(333): Zend_Db_Adapter_Pdo_Abstract->query('SELECT `catalog...', Array)
#4 /Su directorio de instalacion/lib/Zend/Db/Adapter/Abstract.php(725): Varien_Db_Adapter_Pdo_Mysql->query(Object(Varien_Db_Select), Array)
#5 /Su directorio de instalacion/app/code/core/Mage/CatalogInventory/Model/Mysql4/Stock/Item.php(53): Zend_Db_Adapter_Abstract->fetchRow(Object(Varien_Db_Select))
#6 /Su directorio de instalacion/app/code/core/Mage/CatalogInventory/Model/Stock/Item.php(134): Mage_CatalogInventory_Model_Mysql4_Stock_Item->loadByProductId(Object(Mage_CatalogInventory_Model_Stock_Item), Object(Mage_Sales_Model_Quote_Item))
#7 /Su directorio de instalacion/app/design/adminhtml/default/default/template/sales/order/create/items/grid.phtml(239): Mage_CatalogInventory_Model_Stock_Item->loadByProduct(Object(Mage_Sales_Model_Quote_Item))
#8 /Su directorio de instalacion/app/code/core/Mage/Core/Block/Template.php(212): include('/Volumes/ Unida...')
#9 /Su directorio de instalacion/app/code/core/Mage/Core/Block/Template.php(239): Mage_Core_Block_Template->fetchView('adminhtml/defau...')
#10 /Su directorio de instalacion/app/code/core/Mage/Core/Block/Template.php(253): Mage_Core_Block_Template->renderView()
#11 /Su directorio de instalacion/app/code/core/Mage/Adminhtml/Block/Template.php(81): Mage_Core_Block_Template->_toHtml()
#12 /Su directorio de instalacion/app/code/core/Mage/Core/Block/Abstract.php(753): Mage_Adminhtml_Block_Template->_toHtml()
#13 /Su directorio de instalacion/app/code/core/Mage/Core/Block/Abstract.php(520): Mage_Core_Block_Abstract->toHtml()
#14 /Su directorio de instalacion/app/code/core/Mage/Core/Block/Abstract.php(467): Mage_Core_Block_Abstract->_getChildHtml('items_grid', true)
#15 /Su directorio de instalacion/app/design/adminhtml/default/default/template/sales/order/create/items.phtml(32): Mage_Core_Block_Abstract->getChildHtml()
#16 /Su directorio de instalacion/app/code/core/Mage/Core/Block/Template.php(212): include('/Volumes/ Unida...')
#17 /Su directorio de instalacion/app/code/core/Mage/Core/Block/Template.php(239): Mage_Core_Block_Template->fetchView('adminhtml/defau...')
#18 /Su directorio de instalacion/app/code/core/Mage/Core/Block/Template.php(253): Mage_Core_Block_Template->renderView()
#19 /Su directorio de instalacion/app/code/core/Mage/Adminhtml/Block/Template.php(81): Mage_Core_Block_Template->_toHtml()
#20 /Su directorio de instalacion/app/code/core/Mage/Adminhtml/Block/Sales/Order/Create/Items.php(67): Mage_Adminhtml_Block_Template->_toHtml()
#21 /Su directorio de instalacion/app/code/core/Mage/Core/Block/Abstract.php(753): Mage_Adminhtml_Block_Sales_Order_Create_Items->_toHtml()
#22 /Su directorio de instalacion/app/code/core/Mage/Adminhtml/Block/Sales/Order/Create/Load.php(44): Mage_Core_Block_Abstract->toHtml()
#23 /Su directorio de instalacion/app/code/core/Mage/Core/Block/Abstract.php(753): Mage_Adminhtml_Block_Sales_Order_Create_Load->_toHtml()
#24 /Su directorio de instalacion/app/code/core/Mage/Adminhtml/controllers/Sales/Order/CreateController.php(342): Mage_Core_Block_Abstract->toHtml()
#25 /Su directorio de instalacion/app/code/core/Mage/Core/Controller/Varien/Action.php(418): Mage_Adminhtml_Sales_Order_CreateController->loadBlockAction()
#26 /Su directorio de instalacion/app/code/core/Mage/Core/Controller/Varien/Router/Standard.php(254): Mage_Core_Controller_Varien_Action->dispatch('loadBlock')
#27 /Su directorio de instalacion/app/code/core/Mage/Core/Controller/Varien/Front.php(177): Mage_Core_Controller_Varien_Router_Standard->match(Object(Mage_Core_Controller_Request_Http))
#28 /Su directorio de instalacion/app/code/core/Mage/Core/Model/App.php(304): Mage_Core_Controller_Varien_Front->dispatch()
#29 /Su directorio de instalacion/app/Mage.php(596): Mage_Core_Model_App->run(Array)
#30 /Su directorio de instalacion/index.php(78): Mage::run('', 'store')
#31 {main}";s:3:"url";s:186:"/Su directorio de instalacion/index.php/admin/sales_order_create/loadBlock/key/97888fef60b8f8c3ed3d7b6617e17259/block/search,items,shipping_method,totals,giftmessage,billing_method?isAjax=true";s:11:"script_name";s:33:"/Su directorio de instalacion/index.php";s:4:"skin";s:5:"admin";}

Veamos el ejemplo anterior. Magento crea una secuencia de eventos usando # para identificar toda la ruta recorrida hasta que se encuentre el error.

Si el origen es #31, donde muestra el evento (url) que disparó el error. A pesar de ser una información teóricamente obvia, ya que usted estaba navegando en el momento en que el error apareció.

Lo que realmente importa para usted es lo que viene antes del #1. Este es el mensaje que debe interpretar. En este ejemplo:

a:5:{i:0;s:220:"SQLSTATE[42000]: Syntax error...

Si usted es un desarrollador, rápidamente entender que se trata de un error de SQL. Y en el resto del mensaje aún es posible identificar con más detalle el error.

Ahora, si has leído la primera línea del archivo de registro y no has entendido nada… bueno, no desanime. Ahora usted sabe lo que debe buscar, y puede solicitar ayuda de forma adecuada en foros y grupos.

Siempre en alerta

Una buena manera de tratar problemas, es trabajar en la prevención de ellos. Los siguientes consejos pueden ayudar.

1. Tenga siempre una copia de seguridad de lo que es realmente importante. La frecuencia de la generación de copias de seguridad dependerá del flujo (cantidad) y de la importancia (generalmente financiera) que puede representar. Las copias de seguridad pueden ser diarias, semanales, mensuales, bimestrales.

2. Tenga un entorno de prueba. Magento posee varias versiones de su sistema, y existen innumerables módulos a su disposición. No se deje llevar por la emoción de tener un nuevo módulo rodando en su tienda inmediatamente… primero haga una batería de pruebas en un ambiente simulado, y sólo después de aprobado usted debe homologar en su tienda. Lleve esa sugerencia en serio, la mayoría de los problemas se originan por módulos incompatibles.

3. Después de realizar cambios en archivos de configuración, módulos y/o plantillas, actualice la caché del sistema y del navegador. Y no se olvide de reindexar los datos siempre que el Magento solicite. Es posible que se aplique un cambio incoherente y el sistema no presenta un problema inmediatamente porque sigue trabajando con archivos de caché y meses después el problema aparece “nada”.

4. Después de leer el archivo de registro, ya no es necesario suprimir el archivo de la carpeta “var/report/” sin problemas. Pero sea proactivo, no quede esperando que el problema venga a usted. En el caso de que no se encuentre un problema en la navegación, el problema puede ser “descubierto” por algún visitante del sitio, y no todos entrar en contacto con la tienda para advertir que se ha producido un problema en la navegación.

5. Aprende a pedir ayuda. Los mensajes en los foros con título “URGENTE” no van a ayudar. Comience usando el campo de búsqueda del foro con palabras clave que identifiquen su problema, vea si alguien ya ha pasado por el mismo problema y ha podido resolver. Si no, abra un nuevo tema y coloque un título que sea auto-explicativo. Sus posibilidades de obtener ayuda y de ayudar a otras personas sólo van a aumentar.

¡Éxito!

Hasta que surja la oportunidad de mudarme a España, sigo ayudando desde la distancia.