การจัดการข้อยกเว้นใน Magento 2


15

ใน Magento 1 ฉันสามารถตรวจจับข้อยกเว้นและบันทึกลงในexception.logไฟล์โดยใช้Mage::logException($e);

ตอนนี้ใน Magento 2 ฉันทำได้catch (\Exception $e)แต่ฉันจะทำอย่างไรกับข้อยกเว้นที่จับได้? ฉันจะเข้าสู่ระบบได้exception.logอย่างไร? หรือวิธีทั่วไปในการจัดการสิ่งนี้คืออะไร?

คำตอบ:


20

วิธีที่ง่ายที่สุดในการเริ่มการบันทึกข้อยกเว้นของคุณคือการแทรกสิ่งก่อสร้างPsr\Log\LoggerInterfaceลงในคลาสของคุณ:

private $logger;

public function __construct(\Psr\Log\LoggerInterface $logger)
{
    $this->logger = $logger;
}

และจากนั้นในcatchคำสั่งของคุณ:

public function doSomething()
{
    try {
        /* Some logic that could throw an Exception */
    } catch (\Exception $e) {
        $this->logger->critical($e->getMessage());
    }
}

สิ่งอื่นใดที่เกี่ยวข้องกับวิธีการตอบสนองหลังจากติดข้อยกเว้นไม่ควรแตกต่างกันระหว่าง M1 และ M2 กลยุทธ์ของคุณจะเฉพาะเจาะจงมากกับการจัดการข้อยกเว้นกรณีการใช้งาน


5
Pro เคล็ดลับ: M2 $this->logger->debug($e)มีการสนับสนุนโดยตรงผ่านข้อยกเว้น:
nevvermind

1
ที่จริงแล้วเพื่อเข้าสู่ระบบข้อยกเว้นจำเป็นต้องใช้critical()วิธีการแทนdebug()
joni jones

getMessage ควรเป็นการเรียกใช้ฟังก์ชัน: getMessage ()
LM_Fielding

1
@LM_Fielding จับที่ดีได้รับการแก้ไข
brendanWeb

@jonijones ความผิดพลาดของฉันคงที่
brendanWeb

7

Magento2 มีตัวจัดการข้อยกเว้นประเภทต่าง ๆ เช่น:

  • StateException
  • InputException
  • InvalidEmailOrPasswordException
  • MailException
  • NotFoundException
  • ValidatorException

เป็นต้น

\vendor\magento\framework\Exceptionประเภทการจัดการและการเรียนของพวกเขาอยู่ใน

คุณต้องเลือกตัวจัดการข้อยกเว้นที่เกี่ยวข้องสำหรับความต้องการของคุณและใช้สิ่งนั้น

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.