Bagaimana saya bisa mendapatkan notifikasi email untuk pengecualian?

14

Bagaimana cara saya mengatur pemberitahuan email untuk pengecualian yang dicatat atau dilemparkan di situs?

PEMBARUAN: Beberapa orang berkomentar tentang kenyataan bahwa Anda mungkin berharap mendapatkan terlalu banyak email jika setiap pengecualian terkirim melalui email kepada Anda. Saya cenderung suka membuat catatan pengecualian saya cukup ringan. Apa pun yang terjadi di sana saya anggap sebagai pengecualian. Jika itu diharapkan fungsionalitas dan bukan masalah, maka saya suka menangkap pengecualian, mungkin mencatatnya ke file lain (mungkin system.log) jika diperlukan, tetapi tidak mencatatnya di exception.log.

Tetapi jika Anda memiliki banyak suara dalam pengecualian Anda. Log yang tidak ingin Anda bersihkan, kemungkinan besar Anda tidak akan mau melakukan ini.

kalenjordan
sumber
6
ANDA AKAN
MENGHANCURKAN

Jawaban:

4

Anda dapat menggunakan Magento Hackthon Logger untuk pekerjaan ini: https://github.com/firegento/firegento-logger/

Ini bukan pertanyaan, tetapi ada ekstensi untuk ekstensi: https://github.com/magento-hackathon/LoggerSentry/

Apa yang ingin saya katakan: Mudah untuk menerapkan "Penulis" Anda sendiri :-)

Paul Hachmang
sumber
Bagus! Terima kasih Paul. Apakah itu memungkinkan Anda untuk mengirim email sendiri hanya log pengecualian? Itu adalah kasus penggunaan utama yang saya minati dan saya pikir sesuatu yang secara umum dapat diterapkan pada banyak pemasangan Magento.
kalenjordan
Anda dapat mengatur berbagai treshholds apa yang harus dilakukan dengan log, mengirim Pengecualian ke XMPP (obrolan gmail), mengirim kesalahan ke surat dan mencatat pemberitahuan ke database misalnya.
Paul Hachmang
Hanya FYI, proyek ini telah dipindahkan ... github.com/firegento/firegento-logger
Scruffy Paws
@PaulHachmang tautan pertama github.com/magento-hackathon/Logger sudah mati. Mungkin ingin memperbaruinya.
SR_Magento
8

Ini sepertinya tidak mudah diakses seperti yang saya pikir seharusnya dari beberapa pencarian yang saya lakukan, jadi saya memposting pertanyaan pertanyaan / jawaban untuk referensi di masa mendatang.

Pengecualian yang dilemparkan

Anda dapat mengaktifkan pemberitahuan email untuk pengecualian yang dilemparkan menggunakan kesalahan / local.xml. Anda dapat menyalin errors/local.xml.templateke `kesalahan / local.xml 'dan memasukkan alamat email dan baris subjek yang ingin Anda gunakan.

<config>
    <skin>default</skin>
    <report>
        <action>email</action>
        <subject>domain.com exception</subject>
        <email_address>[email protected]</email_address>
        <trash>leave</trash>
    </report>
</config>

Kemudian, jika ada pengecualian yang dilemparkan dan ditangkap oleh sistem penanganan kesalahan Magento, di mana layar laporan kesalahan ditampilkan kepada pengguna akhir, Anda akan mendapatkan pemberitahuan email.

Pengecualian yang Dicatat

Jika Anda juga ingin mendapatkan notifikasi email untuk pengecualian yang tidak dilemparkan tetapi dicatat, Anda harus mendapatkan sedikit lebih jauh di bawah tenda.

Pertama, timpa kelas penulis log inti .

Setelah Anda selesai melakukannya, cukup masukkan kode untuk menembak sendiri email setelah pengecualian tersebut dicatat. Ingatlah bahwa Anda perlu menyimpan nama file log dari dalam __construct()agar dapat mengaksesnya dari _write()metode.

class Module_Core_Model_Zend_Log_Writer_Stream extends Zend_Log_Writer_Stream
{
    protected $_streamOrUrl;

    public function __construct($streamOrUrl, $mode = NULL)
    {
        parent::__construct($streamOrUrl, $mode);

        $this->_streamOrUrl = $streamOrUrl;
    }

    protected function _write($event)
    {
        parent::_write($event);

        if (strpos($this->_streamOrUrl, 'exception.log') === false) {
            return;
        }

        // Send email here    
    }
}
kalenjordan
sumber
Hati-hati dengan ini. Jika ada yang salah di situs, Anda akan berakhir dengan membanjirnya email. Ini sendiri akan menyeret server ke bawah. Anda kemudian berakhir dengan bukan hanya situs yang rusak, tetapi server yang tidak dapat diakses! Anda kemudian harus menghapus banyak surat dari que email. Ini terjadi pada saya di masa lalu
ProxiBlue
Itu poin yang bagus. Kami tidak mengelola sendiri server surat (Mandrill) tetapi masih ada beberapa hal yang dapat tersumbat dengan cepat jika semua pengecualian tiba-tiba mulai membanjiri karena suatu alasan.
kalenjordan
Saya selalu berpikir que email akan menjadi modul yang bagus. (setiap pengambil untuk satu yang dihosting di github / know of one?) - pada dasarnya setiap email yang dikirim magento untuk dikirim ke que email, dengan cron yang berjalan setiap x menit dan mengirim email berikutnya di que. Que dapat memiliki penghitung dan jika pesan yang identik ditempatkan, itu bisa saja di atas meja. Jadi jika Anda memiliki 100 pesan pengecualian, dari pengecualian yang sama, Anda hanya akan mendapatkan 1 email, dengan 'xxx instance dari email ini'. Ini juga akan memberikan poin bagus untuk memeriksa apakah email dikirim dari magento. - Saya hanya tidak punya waktu untuk menulis ini :(
ProxiBlue
7

Mengemail setiap pengecualian mungkin akan menghasilkan BANYAK surat.

Ini mungkin merupakan opsi yang lebih baik untuk hanya mencatat pengecualian ke log pengecualian dan mengirimkannya sekali sehari kepada diri Anda sendiri menggunakan cronjob di linux

0 23 * * * /usr/lib/sendmail email@domain.com < /home/shop.com/www/var/log/exception.log

Dan secara opsional membersihkannya setelah Anda mengirimkannya

0 23 * * * /usr/lib/sendmail email@domain.com < /home/shop.com/www/var/log/exception.log;rm /home/shop.com/www/var/log/exception.log

Atau Anda bisa menjalankannya setiap jam jika Anda membutuhkan frekuensi yang lebih tinggi.

Dengan cara ini tidak perlu menimpa file apa pun dan menjaga beban pada server yang terus-menerus mengirim surat kepada Anda.

Sander Mangel
sumber
Terima kasih Sander. Saya berpendapat bahwa pengecualian yang masuk adalah masalah yang perlu diselesaikan, jadi Anda harus memiliki pengecualian rendah yang sedang dicatat. Saya memang menyukai kesederhanaan pekerjaan cron untuk mem-pipe log pengecualian, tetapi saya tidak yakin bahwa saya menyukai gagasan untuk menghapus log setiap kali diemail.
kalenjordan
+1; karena saya pribadi merasa ini adalah pilihan terbaik untuk melakukan ini. Terima kasih telah berbagi pemikiran Anda :-)
Rajeev K Tomy
2

mungkin Anda juga bisa tertarik dengan integrasi Magento / Monolog saya

https://github.com/aleron75/magemonolog

Salam Alessandro

Alessandro Ronchi
sumber
Pekerjaan bagus, hanya ingin tahu apakah itu diuji pada Magento versi 1.7? Itu tidak mengirim email untuk saya di magneto versi 1.7.0.2
Haris
1
Maaf @Haris Saya tidak tahu tapi email yang tidak terkirim kemungkinan tergantung pada konfigurasi server email Anda dan bukan pada ekstensi
Alessandro Ronchi
1

Saya tidak suka implementasi Mage :: log's custom writerModel atau saya tidak memahaminya. Bagi saya itu tidak memanfaatkan desain Zend_Log untuk mengaktifkan dan menulis. Saya akan mengambil Log bukan Penulis. Oleh karena itu saya membuat solusi untuk mengambil keuntungan penuh dari Zend_Log dan masih menulis tidak banyak kode, karena saya mengumpulkan Zend_log.

class XX_XXX_Model_Log extends Zend_Log_Writer_Abstract{

/**
 * @var Zend_Log
 */
protected $zendLog = array();

/**
 *
 * @param  mixed $writer Zend_Log_Writer_Abstract or Config array
 * @return void
 */
public function addWriter($writer)
{
    return $this->zendLog->addWriter($writer);
}

/**
 * Write a message to the log.
 *
 * @param  array  $event  log data event
 * @return void
 */
protected function _write($event){
    $this->zendLog->log($event['message'], $event['priority']);
}

/**
 * Konstruktor erweitert Log automatisch um Writer
 *
 * @param sting $file
 */
public function __construct($file){
    $this->zendLog = new Zend_Log();
    $this->enhance($file);
}

/**
 * Hier werden die Writer and Zend_Log angehangen
 *
 * @param sting $file
 */
public function enhance($file){
    /* put your custom Logger here - example firePHP*/
        $writer = Mage::getModel('gdcore/firephp');
        $writer->addFilter(Zend_Log::Debug);
        $this->addWriter($writer);
    }
}

/**
 * Construct a Zend_Log driver
 * 
 * @param  array|Zen_Config $config
 * @return Zend_Log_FactoryInterface
 */
static public function factory($config){
    return Zend_Log::factory($config);
}
}

Ngomong-ngomong di Magento 1.7, saya hanya mendapat beberapa email. Setiap email memiliki beberapa pengecualian / kesalahan untuk satu permintaan, saya kira. Jadi situs yang sering dikunjungi masih akan menghasilkan banyak email. Saya akan melihat itu. Sekarang tidak masalah bagi saya.

Andreas Dyballa
sumber
Terima kasih Andreas. Saya tidak 100% memahami peran model penulis vs model log sendiri, tetapi tampaknya tempat paling alami untuk memperluas Magento dalam hal ini.
kalenjordan
Harap dicatat XX_XXX_Model_Log adalah writer_model! Cukup konfigurasikan config.xml Anda dan tambahkan penulis-email dalam metode boost untuk mengirim beberapa surat juga. Mungkin kita salah paham.
Andreas Dyballa
Maaf maksud saya model penulis vs model aliran penulis. Bagaimanapun, solusi yang saya berikan di atas berfungsi dengan baik, dan tampaknya dapat dibaca seperti ini dan juga memiliki lebih sedikit SLOC.
kalenjordan
Dengan solusi ini Anda dapat menggunakan Zend Framework untuk Zend-logging dan mengonfigurasikan sebanyak mungkin penulis yang Anda inginkan dengan filter dan prioritas. Jadi, sangat mudah untuk membuat penulis file-logging yang dapat dikonfigurasi (diprioritaskan) lebih lanjut yang dapat Anda kirim dengan cronjob Mage setiap jam melalui surat.
Andreas Dyballa
0

Anda juga dapat menggunakan modul untuk membuat pemberitahuan email atau mendapatkan laporan harian dari pelanggan yang mendapat pengecualian:

Di sini dijelaskan implementasinya: https://grafzahl-io.blogspot.de/2017/03/notifications-for-every-exception-in-magento.html

Ini adalah modul untuk memonitor kesalahan dan acara lainnya (bahkan menerapkan diskon kepada pelanggan jika dia mendapat pengecualian): https://grafzahl.io/notify-module

grafzahl-io
sumber