在Magento中,如何阅读异常.log


In Magento, how does one read the exception.log?

我找不到任何关于如何在Magento中阅读exception.log的文档;关于如何阅读此文档的文档在哪里?

如果没有文档,则按什么顺序打印异常?

#0 是最后发生的还是先发生的?

Stack trace:
#0 .../html/lib/Varien/Db/Statement/Pdo/Mysql.php(110): Zend_Db_Statement_Pdo->_execute(Array)
#1 .../html/lib/Zend/Db/Statement.php(300): Varien_Db_Statement_Pdo_Mysql->_execute(Array)
#2 .../html/lib/Zend/Db/Adapter/Abstract.php(479): Zend_Db_Statement->execute(Array)
#3 .../html/lib/Zend/Db/Adapter/Pdo/Abstract.php(238): Zend_Db_Adapter_Abstract->query('select eav_opti...', Array)
#4 .../html/lib/Varien/Db/Adapter/Pdo/Mysql.php(419): Zend_Db_Adapter_Pdo_Abstract->query('select eav_opti...', Array)
#5 .../html/app/code/local/FME/Manufacturers/Model/Observer/Product.php(47): Varien_Db_Adapter_Pdo_Mysql->query('select eav_opti...')
#6 .../html/app/code/core/Mage/Core/Model/App.php(1338): FME_Manufacturers_Model_Observer_Product->saveTabData(Object(Varien_Event_Observer))
#7 .../html/app/code/core/Mage/Core/Model/App.php(1317): Mage_Core_Model_App->_callObserverMethod(Object(FME_Manufacturers_Model_Observer_Product), 'saveTabData', Object(Varien_Event_Observer))
#8 .../html/app/Mage.php(447): Mage_Core_Model_App->dispatchEvent('catalog_product...', Array)
#9 .../html/app/code/core/Mage/Core/Model/Abstract.php(466): Mage::dispatchEvent('catalog_product...', Array)
#10 .../html/app/code/core/Mage/Catalog/Model/Product.php(548): Mage_Core_Model_Abstract->_afterSave()
#11 .../html/app/code/core/Mage/Core/Model/Abstract.php(319): Mage_Catalog_Model_Product->_afterSave()
#12 .../html/app/code/core/Mage/Adminhtml/controllers/Catalog/ProductController.php(714): Mage_Core_Model_Abstract->save()
#13 .../html/app/code/core/Mage/Core/Controller/Varien/Action.php(419): Mage_Adminhtml_Catalog_ProductController->saveAction()
#14 .../html/app/code/core/Mage/Core/Controller/Varien/Router/Standard.php(250): Mage_Core_Controller_Varien_Action->dispatch('save')
#15 .../html/app/code/core/Mage/Core/Controller/Varien/Front.php(176): Mage_Core_Controller_Varien_Router_Standard->match(Object(Mage_Core_Controller_Request_Http))
#16 .../html/app/code/core/Mage/Core/Model/App.php(354): Mage_Core_Controller_Varien_Front->dispatch()
#17 .../html/app/Mage.php(683): Mage_Core_Model_App->run(Array)
#18 .../html/index.php(91): Mage::run('', 'store')
#19 {main}

这是一个常规的PHP异常堆栈跟踪;它不是Magento特有的。

行 #0 告诉我们,文件的行110 lib/Varien/Db/Statement/Pdo/Mysql.php设法成功地调用了该方法Zend_Db_Statement_Pdo->_execute(),但随后执行此方法的一个命令导致抛出Exception

简单地说,堆栈跟踪只是方法/函数调用的列表,当抛出异常时,应用程序正在执行中。

代码执行从 #19 {main}(堆栈底部)开始。

  • #18,{main}被执行,直到
    方法Mage::run()被调用
    index.php

    的行91
  • #17, Mage::run()被执行,直到
    方法Mage_Core_Model_App->run()被调用
    app/Mage.php

    的行683


  • #1,Zend_Db_Statement->execute()被执行,直到
    方法Varien_Db_Statement_Pdo_Mysql->_execute()被调用
    lib/Zend/Db/Statement.php

    的行300
  • #0,Varien_Db_Statement_Pdo_Mysql->_execute()被执行,直到
    方法Zend_Db_Statement_Pdo->_execute()被调用
    lib/Varien/Db/Statement/Pdo/Mysql.php
    的行110中,但是此方法的某些命令导致引发异常。

作为旁注,我通常不会说堆栈跟踪是"沿着失败的功能列表向下走",就像@pzirkind在他的回答中提到的那样。

因为如果在 #0(堆栈顶部)中调用的方法不会"失败",那么之前调用的许多方法可能仍然可以按预期工作(至少根据我的经验,许多方法通常都是这样),甚至catch抛出的异常。

零发生在最后。

正在发生的事情是,它正在失败的功能列表中下降。它从失败的实际函数开始,然后向您展示它如何继续导致其他事情失败(如果存在,这样可以更轻松地跟踪更深层次的问题)。

佩萨赫