Error log record number – Como identificar o problema

Se alguma coisa pode dar errado, com certeza dará” – Lei de Murphy

Já que o erro é inevitável, precisamos aprender a lidar com ele. E o melhor caminho para solucionarmos um problema é identificando sua causa. Pode parecer óbvio dito dessa maneira, mas tem muita gente que se preocupa em tratar apenas os sintomas e seus efeitos colaterais, negligenciando assim suas origens.

Vamos ver nesse post como o Magento cria os arquivos de log, e como podemos interpretar as informações geradas.

Error log record number

Até a versão 1.3.2.4, sempre que o sistema apresentava um problema inesperado, o mesmo era enviado para o navegador, expondo assim toda fragilidade do site a quem estivesse navegando.

Dessa forma então você tinha dois problemas. O erro inesperado, e uma brecha na segurança que poderia ser explorada por algum hacker de plantão.

A partir da versão 1.4.x a Magento apresentou melhorias no tratamento de erros.

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

Bom, resumir a mensagem de erro não é bem a melhoria que todos esperavam, mas diminui os riscos de ataques externos explorando as falhas que causaram o problema.

Interpretando a mensagem

Muita gente acha que o problema é identificado pelo número do log apresentado. E procuram nos fórus e grupos de ajuda uma solução para o erro de número xxx. E não é assim que funciona. Fazendo uma tradução livre e adaptada da página de erro, teremos uma mensagem que diz:

Deu merda ao processar sua solicitação de página
O erro não será apresentado nessa página por segurança.
VEJA o arquivo de log com número: xxxxxxxxxxx

Esse número é randomico, provavelmente baseado em um contador cronológico como um timestamp. Esse número serve apenas para que possa ser localizado o arquivo.

Sempre que esta tela de erro for apresentada, você pode encontrar um arquivo (sem extensão) no seu diretório de instalação do Magento, na pasta “var/report/“. Basta abrir o arquivo usando um editor de texto.

Identificando o problema

Assim que você abrir o arquivo, uma sequência de informações devem ser apresentadas. A primeira vista pode parece ser algo indecifrável, mas com o tempo e algumas dicas você será capaz de resolver a maioria deles.

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 /Sua intalacao do magento/lib/Zend/Db/Statement.php(300): Zend_Db_Statement_Pdo->_execute(Array)
#1 /Sua intalacao do magento/lib/Zend/Db/Adapter/Abstract.php(468): Zend_Db_Statement->execute(Array)
#2 /Sua intalacao do magento/lib/Zend/Db/Adapter/Pdo/Abstract.php(238): Zend_Db_Adapter_Abstract->query('SELECT `catalog...', Array)
#3 /Sua intalacao do magento/lib/Varien/Db/Adapter/Pdo/Mysql.php(333): Zend_Db_Adapter_Pdo_Abstract->query('SELECT `catalog...', Array)
#4 /Sua intalacao do magento/lib/Zend/Db/Adapter/Abstract.php(725): Varien_Db_Adapter_Pdo_Mysql->query(Object(Varien_Db_Select), Array)
#5 /Sua intalacao do magento/app/code/core/Mage/CatalogInventory/Model/Mysql4/Stock/Item.php(53): Zend_Db_Adapter_Abstract->fetchRow(Object(Varien_Db_Select))
#6 /Sua intalacao do magento/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 /Sua intalacao do magento/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 /Sua intalacao do magento/app/code/core/Mage/Core/Block/Template.php(212): include('/Volumes/ Unida...')
#9 /Sua intalacao do magento/app/code/core/Mage/Core/Block/Template.php(239): Mage_Core_Block_Template->fetchView('adminhtml/defau...')
#10 /Sua intalacao do magento/app/code/core/Mage/Core/Block/Template.php(253): Mage_Core_Block_Template->renderView()
#11 /Sua intalacao do magento/app/code/core/Mage/Adminhtml/Block/Template.php(81): Mage_Core_Block_Template->_toHtml()
#12 /Sua intalacao do magento/app/code/core/Mage/Core/Block/Abstract.php(753): Mage_Adminhtml_Block_Template->_toHtml()
#13 /Sua intalacao do magento/app/code/core/Mage/Core/Block/Abstract.php(520): Mage_Core_Block_Abstract->toHtml()
#14 /Sua intalacao do magento/app/code/core/Mage/Core/Block/Abstract.php(467): Mage_Core_Block_Abstract->_getChildHtml('items_grid', true)
#15 /Sua intalacao do magento/app/design/adminhtml/default/default/template/sales/order/create/items.phtml(32): Mage_Core_Block_Abstract->getChildHtml()
#16 /Sua intalacao do magento/app/code/core/Mage/Core/Block/Template.php(212): include('/Volumes/ Unida...')
#17 /Sua intalacao do magento/app/code/core/Mage/Core/Block/Template.php(239): Mage_Core_Block_Template->fetchView('adminhtml/defau...')
#18 /Sua intalacao do magento/app/code/core/Mage/Core/Block/Template.php(253): Mage_Core_Block_Template->renderView()
#19 /Sua intalacao do magento/app/code/core/Mage/Adminhtml/Block/Template.php(81): Mage_Core_Block_Template->_toHtml()
#20 /Sua intalacao do magento/app/code/core/Mage/Adminhtml/Block/Sales/Order/Create/Items.php(67): Mage_Adminhtml_Block_Template->_toHtml()
#21 /Sua intalacao do magento/app/code/core/Mage/Core/Block/Abstract.php(753): Mage_Adminhtml_Block_Sales_Order_Create_Items->_toHtml()
#22 /Sua intalacao do magento/app/code/core/Mage/Adminhtml/Block/Sales/Order/Create/Load.php(44): Mage_Core_Block_Abstract->toHtml()
#23 /Sua intalacao do magento/app/code/core/Mage/Core/Block/Abstract.php(753): Mage_Adminhtml_Block_Sales_Order_Create_Load->_toHtml()
#24 /Sua intalacao do magento/app/code/core/Mage/Adminhtml/controllers/Sales/Order/CreateController.php(342): Mage_Core_Block_Abstract->toHtml()
#25 /Sua intalacao do magento/app/code/core/Mage/Core/Controller/Varien/Action.php(418): Mage_Adminhtml_Sales_Order_CreateController->loadBlockAction()
#26 /Sua intalacao do magento/app/code/core/Mage/Core/Controller/Varien/Router/Standard.php(254): Mage_Core_Controller_Varien_Action->dispatch('loadBlock')
#27 /Sua intalacao do magento/app/code/core/Mage/Core/Controller/Varien/Front.php(177): Mage_Core_Controller_Varien_Router_Standard->match(Object(Mage_Core_Controller_Request_Http))
#28 /Sua intalacao do magento/app/code/core/Mage/Core/Model/App.php(304): Mage_Core_Controller_Varien_Front->dispatch()
#29 /Sua intalacao do magento/app/Mage.php(596): Mage_Core_Model_App->run(Array)
#30 /Sua intalacao do magento/index.php(78): Mage::run('', 'store')
#31 {main}";s:3:"url";s:186:"/instalacao magento/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:"/instalacao do magento/index.php";s:4:"skin";s:5:"admin";}

Vejamos o exemplo acima. O Magento cria uma sequência de eventos usando # para identificar todo caminho percorrido até o erro ser encontrado.

Sendo a origem #31, onde ele mostra o evento (url) que disparou o erro. Apesar de ser uma informação teoricamente óbvia, já que você estava navegando no momento que o erro apareceu.

O que realmente importa para você é o que vem antes do #1. Essa é a mensagem que você deve interpretar. Neste exemplo:

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

Se você for um desenvolvedor, rapidamente vai entender que se trata de um erro de SQL. E no restante da mensagem ainda é possível identificar com mais detalhes o erro.

Agora, se você leu a primeira linha do arquivo de log e não entendeu nada… bom, não desanime. Agora você sabe o que deve procurar, e pode solicitar ajuda de forma adequada em fóruns e grupos.

Sempre em alerta

Uma boa maneira de tratar problemas, é trabalhando na prevenção deles. E as dicas abaixo podem ajudar.

1. Tenha sempre um backup do que for realmente importante. A frequência da geração de backups vai depender do fluxo (quantidade) e da importância (geralmente financeira) que isso pode representar. Os backups podem ser diários, semanais, mensais, bimestrais.

2. Tenha um ambiente de testes. O Magento possui diversas versões de seu sistema, e existem incontáveis módulos a sua disposição. Não se deixe levar pela emoção de ter um novo módulo rodando na sua loja imediatamente… primeiro faça uma bateria de testes em um ambiente simulado, e só depois de aprovado você deve homologar em sua loja. Leve essa dica a sério, a maioria dos problemas são originados por módulos incompatíveis.

3. Depois de efetuar alterações em arquivos de configuração, módulos e/ou templates, atualize o cache do sistema e do navegador. E não se esqueça de reindexar os dados sempre que o Magento solicitar. Pode acontecer de você aplicar uma alteração inconsistente e o sistema não apresentar problema de imediato porque continua trabalhando com arquivos de cache, e meses depois o problema aparecer do “nada”.

4. Depois de ler o arquivo de log, você não precisa mais dele, pode deletar o arquivo da pasta “var/report/” sem problemas. Mas seja pró-ativo, não fique esperando que o problema venha até você. Crie o hábito de verificar esse diretório de tempos em tempos, pois um problema pode ser “descoberto” por algum visitante do site, e nem todos irão entrar em contato com a loja para avisar que ocorreu um problema na navegação.

5. Aprenda a pedir ajuda. Mensagens em fóruns com título “URGENTE” não vão ajudar. Comece usando o campo de busca do fórum com palavras-chaves que identifiquem seu problema, veja se alguém já passou pelo mesmo problema e conseguiu resolver. Senão, abra um novo tópico e coloque um título que seja auto-explicativo. Suas chances de obter ajuda e de ajudar outras pessoas só vão aumentar.

Sucesso!