Penanganan pengecualian di Magento 2

15

Di Magento 1 saya bisa menangkap pengecualian dan mencatatnya exception.logmenggunakan fileMage::logException($e);

Sekarang, di Magento 2, saya bisa catch (\Exception $e)tetapi apa yang harus saya lakukan dengan pengecualian yang tertangkap? Bagaimana cara saya login exception.log? Atau apa cara khas untuk menangani ini?

Andre Nickatina
sumber

Jawaban:

20

Cara termudah untuk mulai mencatat pengecualian Anda adalah dengan menyuntikkannya Psr\Log\LoggerInterfaceke konstruktor kelas Anda:

private $logger;

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

Dan kemudian dalam catchpernyataan Anda :

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

Hal lain yang terkait dengan cara bereaksi setelah pengecualian tertangkap seharusnya tidak berbeda antara M1 dan M2. Strategi Anda juga akan sangat spesifik untuk kasus penggunaan penanganan pengecualian Anda.

brendanWeb
sumber
5
Pro Tip: M2 memiliki dukungan untuk langsung melewati pengecualian: $this->logger->debug($e).
nevvermind
1
Sebenarnya untuk mencatat pengecualian perlu menggunakan critical()metode sebagai gantinyadebug()
joni jones
getMessage harus berupa panggilan fungsi: getMessage ()
LM_Fielding
1
@LM_Fielding Tangkapan bagus, diperbaiki.
brendanWeb
@jonijones Kesalahan saya, diperbaiki.
brendanWeb
7

Magento2 memiliki berbagai jenis penangan pengecualian, misalnya:

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

Dll

Semua tipe handler dan kelasnya ada di \vendor\magento\framework\Exception.

Anda perlu memilih penangan Pengecualian yang relevan untuk persyaratan Anda dan menggunakannya.

Amit Bera
sumber