ฉันจะรับการแจ้งเตือนทางอีเมลสำหรับข้อยกเว้นได้อย่างไร


14

ฉันจะตั้งค่าการแจ้งเตือนทางอีเมลสำหรับข้อยกเว้นที่บันทึกหรือโยนลงบนเว็บไซต์ได้อย่างไร

อัปเดต: มีบางคนแสดงความคิดเห็นเกี่ยวกับความจริงที่ว่าคุณอาจคาดหวังว่าจะได้รับอีเมลมากเกินไปหากคุณมีข้อยกเว้นทุกอย่างที่ส่งถึงคุณ ฉันมักจะชอบที่จะเก็บบันทึกข้อยกเว้นของฉันค่อนข้างเบา อะไรก็ตามที่เข้าไปในนั้นฉันมองว่าเป็นข้อยกเว้น หากเป็นไปตามที่คาดหวังว่าจะใช้งานได้และไม่ใช่ปัญหาฉันก็ชอบที่จะตรวจจับข้อยกเว้นอาจจะบันทึกมันไปยังไฟล์อื่น (อาจจะ system.log) หากจำเป็น แต่ไม่ได้บันทึกไว้ใน exception.log

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


6
คุณจะชน GMAIL
เครื่องหมาย

คำตอบ:


4

คุณสามารถใช้ Magento Hackthon Logger สำหรับงานนี้: https://github.com/firegento/firegento-logger/

ไม่ใช่คำถาม แต่มีส่วนขยายสำหรับส่วนขยาย: https://github.com/magento-hackathon/LoggerSentry/

สิ่งที่ฉันต้องการจะพูด: มันง่ายที่จะใช้ "นักเขียน" ของคุณเอง :-)


ดี! ขอบคุณพอล ที่จะช่วยให้คุณส่งอีเมลถึงตัวคุณเองยกเว้นบันทึกเท่านั้น ? นั่นเป็นกรณีการใช้งานเบื้องต้นที่ฉันสนใจและฉันคิดว่าบางสิ่งที่สามารถใช้ได้กับการติดตั้ง Magento โดยทั่วไป
kalenjordan

คุณสามารถตั้งค่า treshholds ต่างๆว่าจะทำอย่างไรกับบันทึกส่งข้อยกเว้นไปยัง XMPP (แชท Gmail) ส่งข้อผิดพลาดไปยังอีเมลและบันทึกข้อสังเกตไปยังฐานข้อมูลเช่น
Paul Hachmang

เพียงแค่ FYI โครงการนี้ได้ถูกย้าย ... github.com/firegento/firegento-logger
Scruffy Paws

@PaulHachmang ลิงก์แรก github.com/magento-hackathon/Loggerนั้นตาย อาจต้องการอัปเดต
SR_Magento

8

ดูเหมือนจะไม่สามารถเข้าถึงได้อย่างง่ายดายเท่าที่ฉันคิดว่าควรมาจากการค้นหาบางอย่างที่ฉันทำดังนั้นฉันจึงโพสต์คำถามคำถาม / คำตอบสำหรับการอ้างอิงในอนาคต

โยนข้อยกเว้น

คุณสามารถเปิดใช้งานการแจ้งเตือนทางอีเมลสำหรับข้อยกเว้นที่ถูกโยนโดยใช้ข้อผิดพลาด / local.xml คุณสามารถคัดลอกของคุณerrors/local.xml.templateไปที่ `ข้อผิดพลาด / local.xml 'และวางในที่อยู่อีเมลและบรรทัดเรื่องที่คุณต้องการใช้

<config>
    <skin>default</skin>
    <report>
        <action>email</action>
        <subject>domain.com exception</subject>
        <email_address>name@example.com</email_address>
        <trash>leave</trash>
    </report>
</config>

จากนั้นหากมีการโยนข้อยกเว้นใด ๆ และระบบการจัดการข้อผิดพลาดของ Magento ที่หน้าจอรายงานข้อผิดพลาดปรากฏขึ้นให้ผู้ใช้ปลายทางคุณจะได้รับการแจ้งเตือนทางอีเมล

ข้อยกเว้นที่บันทึกไว้

หากคุณต้องการรับการแจ้งเตือนทางอีเมลสำหรับข้อยกเว้นที่ไม่ได้ถูกโยนทิ้ง แต่เข้าสู่ระบบแล้วคุณจะต้องได้รับเพิ่มเติมเล็กน้อยภายใต้ประทุน

ครั้งแรกแทนที่แกนชั้นล็อกนักเขียน

เมื่อคุณทำเสร็จแล้วเพียงวางรหัสเพื่อยิงอีเมลด้วยตัวคุณเองหลังจากบันทึกข้อยกเว้นแล้ว โปรดจำไว้ว่าคุณต้องบันทึกชื่อไฟล์บันทึกจากภายใน__construct()เพื่อให้สามารถเข้าถึงได้จาก_write()วิธีการ

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    
    }
}

ระวังสิ่งนี้ หากมีสิ่งผิดปกติเกิดขึ้นในเว็บไซต์คุณจะพบว่ามีอีเมลจำนวนมาก ในตัวมันเองจะลากเซิร์ฟเวอร์ลง จากนั้นคุณจะจบลงด้วยการไม่เพียงแค่เว็บไซต์เสียหาย แต่เป็นเซิร์ฟเวอร์ที่เข้าถึงไม่ได้! จากนั้นคุณต้องล้างเมลจำนวนมากจากเมลคิวด้วย เรื่องนี้เกิดขึ้นกับฉันในอดีต
ProxiBlue

นั่นเป็นจุดที่ดี เราไม่ได้จัดการเมลเซิร์ฟเวอร์ด้วยตัวเอง (Mandrill) แต่ยังมีสิ่งต่าง ๆ ที่สามารถอุดตันได้อย่างรวดเร็วหากมีข้อยกเว้นเกิดขึ้นอย่างฉับพลันด้วยเหตุผลบางอย่าง
kalenjordan

ฉันมักจะคิดว่าเมล que จะเป็นโมดูลที่ยอดเยี่ยม (ผู้รับหนึ่งสำหรับโฮสต์บน github / รู้หนึ่ง?) - โดยทั่วไปอีเมลใด ๆ วีโอไอพีส่งไปทิ้งในคิวอีเมลกับ cron ที่ทำงานทุก ๆ x นาทีและส่งอีเมลต่อไปในคิว คิวอาจมีตัวนับและถ้ามีข้อความที่เหมือนกัน ดังนั้นหากคุณมีข้อความแสดงข้อยกเว้น 100 ข้อความจากข้อยกเว้นเดียวกันคุณจะได้รับ 1 อีเมลเท่านั้นโดยมี 'อินสแตนซ์ xxx ของอีเมลนี้' นอกจากนี้ยังจะเป็นจุดที่ดีในการตรวจสอบว่าอีเมลถูกส่งมาจากวีโอไอพี - ฉันไม่มีเวลาเขียนอันนี้ :(
ProxiBlue

7

การส่งอีเมลทุกข้อยกเว้นอาจส่งผลให้มีอีเมลจำนวนมาก

มันอาจจะเป็นตัวเลือกที่ดีกว่าเพียงแค่บันทึกข้อยกเว้นลงในบันทึกข้อยกเว้นและอีเมลที่ใช้ตัว cronjob ใน linux วันละครั้ง

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

และเลือกที่จะล้างมันหลังจากที่คุณส่งมัน

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

หรือคุณสามารถรันมันทุกชั่วโมงหากคุณต้องการความถี่ที่สูงขึ้น

วิธีนี้ไม่จำเป็นต้องเขียนทับไฟล์ใด ๆ และทำให้โหลดบนเซิร์ฟเวอร์ที่ส่งอีเมลถึงตัวคุณเองอย่างต่อเนื่อง


ขอบคุณซานเดอร์ ฉันจะยืนยันว่าข้อยกเว้นที่บันทึกเป็นปัญหาที่ต้องแก้ไขดังนั้นคุณควรมีข้อยกเว้นที่เกิดขึ้นน้อย ฉันชอบความเรียบง่ายของงาน cron ในการบันทึกการยกเว้น แต่ฉันไม่แน่ใจว่าฉันชอบความคิดในการล้างบันทึกทุกครั้งที่ส่งอีเมล
kalenjordan

+1; เพราะโดยส่วนตัวฉันรู้สึกว่านี่เป็นตัวเลือกที่ดีที่สุดในการทำเช่นนี้ ขอบคุณที่แบ่งปันความคิดของคุณ :-)
Rajeev K Tomy

2

บางทีคุณอาจสนใจในการรวม Magento / Monolog ของฉัน

https://github.com/aleron75/magemonolog

ขอแสดงความนับถืออเลสซานโดร


ทำได้ดีมากแค่อยากรู้ว่ามันมีการทดสอบกับ magento version 1.7 หรือไม่? มันไม่ส่งอีเมลให้ฉันในรุ่น magneto 1.7.0.2
Haris

1
ขออภัย @Haris ฉันไม่รู้ แต่อีเมลที่ยังไม่ได้ส่งอาจขึ้นอยู่กับการกำหนดค่าเซิร์ฟเวอร์อีเมลของคุณแทนที่จะใช้นามสกุล
Alessandro Ronchi

1

ฉันไม่ชอบการใช้ Mage :: log ที่กำหนดเองของ writerModel หรือฉันไม่เข้าใจ สำหรับฉันมันไม่ได้ใช้ประโยชน์จากการออกแบบ Zend_Log เพื่อเปิดใช้งานตัวเขียน n ฉันจะใช้บันทึกไม่ใช่นักเขียน ดังนั้นฉันจึงใช้วิธีแก้ปัญหาเพื่อใช้ประโยชน์เต็มที่จาก Zend_Log และยังคงเขียนโค้ดไม่มากเนื่องจากฉันรวม 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);
}
}

โดย Magento 1.7 ฉันได้รับเพียงไม่กี่อีเมล แต่ละอีเมลมีข้อยกเว้น / ข้อผิดพลาดสำหรับคำขอเดียวฉันเดา เว็บไซต์ที่เข้าเยี่ยมชมบ่อยมากจะยังคงส่งผลให้มีอีเมลจำนวนมาก ฉันจะมองเรื่องนั้น โดยตอนนี้มันโอเคสำหรับฉัน


ขอบคุณ Andreas ฉันไม่เข้าใจ 100% ในบทบาทของนักเขียนโมเดลเทียบกับตัวแบบบันทึกด้วยตัวเอง แต่ดูเหมือนว่าเป็นเรื่องธรรมดาที่สุดที่จะขยาย Magento ในกรณีนี้
kalenjordan

โปรดทราบ XX_XXX_Model_Log เป็น writer_model! เพียงแค่กำหนดค่า config.xml ของคุณและเพิ่มผู้เขียนอีเมลด้วยวิธีการปรับปรุงเพื่อส่งอีเมลบางอย่างเช่นกัน บางทีเราอาจเข้าใจผิด
Andreas Dyballa

ขอโทษฉันหมายถึงนักเขียนแบบ vs นักเขียนแบบสตรีม ไม่ว่าจะใช้วิธีใดวิธีแก้ปัญหาที่ฉันให้ไว้ข้างต้นก็ใช้ได้ดีและดูเหมือนว่าจะอ่านได้เช่นนี้และมี SLOC น้อยกว่า
kalenjordan

ด้วยโซลูชันนี้คุณสามารถใช้ Zend Framework สำหรับการบันทึก Zend และกำหนดค่าเป็นตัวเขียนจำนวนมากที่คุณต้องการด้วยตัวกรองและลำดับความสำคัญ ดังนั้นจึงเป็นเรื่องง่ายมากที่จะกำหนดค่า (สำคัญ) เพิ่มเติม fe ตัวเขียนบันทึกไฟล์ซึ่งคุณสามารถส่งด้วย Mage cronjob ทุกชั่วโมงผ่านทางอีเมล
Andreas Dyballa

0

คุณสามารถใช้โมดูลเพื่อสร้างการแจ้งเตือนทางอีเมลหรือรับรายงานรายวันของลูกค้าที่มีข้อยกเว้น:

นี่คือคำอธิบายการใช้งาน: https://grafzahl-io.blogspot.de/2017/03/notifications-for-every-exception-in-magento.html

นี่คือโมดูลในการตรวจสอบข้อผิดพลาดและกิจกรรมอื่น ๆ (แม้จะใช้ส่วนลดให้กับลูกค้าหากเขาได้รับการยกเว้น): https://grafzahl.io/notify-module

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