Làm thế nào tôi có thể nhận thông báo qua email cho các trường hợp ngoại lệ?


14

Làm cách nào để thiết lập thông báo email cho các trường hợp ngoại lệ được ghi lại hoặc ném trên trang web?

CẬP NHẬT: Một vài người đã bình luận về thực tế rằng bạn có thể mong đợi nhận được quá nhiều email nếu bạn có mọi ngoại lệ được gửi qua email cho bạn. Tôi có xu hướng thích giữ nhật ký ngoại lệ của tôi khá nhẹ. Bất cứ điều gì đi vào đó tôi cũng xem, một ngoại lệ. Nếu đó là chức năng mong đợi và không phải là vấn đề, thì tôi muốn bắt ngoại lệ, có thể đăng nhập nó vào một tệp khác (có thể system.log) nếu cần, nhưng không đăng nhập nó vào ngoại lệ.log.

Nhưng nếu bạn có nhiều tiếng ồn trong trường hợp ngoại lệ của mình. Nếu bạn không muốn dọn dẹp, có thể bạn sẽ không muốn làm điều này.


6
BẠN S
CR

Câu trả lời:


4

Bạn có thể sử dụng Magento Hackthon Logger cho công việc này: https://github.com/firegento/firegento-logger/

Đây không phải là câu hỏi, nhưng có phần mở rộng cho tiện ích mở rộng: https://github.com/magento-hackathon/LoggerSentry/

Điều tôi muốn nói: Thật dễ dàng để thực hiện "Nhà văn" của riêng bạn :-)


Đẹp! Cảm ơn Paul. Điều đó sẽ cho phép bạn gửi email cho mình chỉ nhật ký ngoại lệ? Đó là trường hợp sử dụng chính mà tôi quan tâm và tôi nghĩ rằng một cái gì đó thường có thể áp dụng cho nhiều cài đặt Magento.
kalenjordan

Bạn có thể thiết lập nhiều mức độ khác nhau để làm gì với nhật ký, gửi Ngoại lệ đến XMPP (trò chuyện gmail), gửi lỗi đến thư và đăng thông báo vào cơ sở dữ liệu chẳng hạn.
Paul Hachmang

Chỉ cần FYI, dự án này đã được chuyển đi ... github.com/firegento/firegento-logger
Scruffy Paws

@PaulHachmang mắt xích đầu tiên github.com/magento-hackathon/Logger là chết. Có thể muốn cập nhật nó.
SR_Magento

8

Điều này dường như không dễ tiếp cận như tôi nghĩ nó nên từ một số tìm kiếm tôi đã làm, vì vậy tôi đang đăng một câu hỏi / câu trả lời để tham khảo trong tương lai.

Ngoại lệ ném

Bạn có thể bật thông báo email cho các trường hợp ngoại lệ được ném bằng cách sử dụng lỗi / local.xml. Bạn có thể sao chép của bạn errors/local.xml.templatevào `lỗi / local.xml 'và thả vào địa chỉ email và dòng chủ đề mà bạn muốn sử dụng.

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

Sau đó, nếu bất kỳ trường hợp ngoại lệ nào được ném và bắt bởi hệ thống xử lý lỗi của Magento, trong đó màn hình báo cáo lỗi được hiển thị cho người dùng cuối, bạn sẽ nhận được thông báo qua email.

Ngoại lệ được ghi

Nếu bạn cũng muốn nhận thông báo qua email về các trường hợp ngoại lệ không được ném mà thay vào đó là ghi nhật ký, bạn sẽ cần phải đi xa hơn một chút dưới mui xe.

Đầu tiên, ghi đè lớp trình ghi nhật ký lõi .

Khi bạn đã thực hiện điều đó, chỉ cần nhập mã để tự gửi email sau khi ngoại lệ được ghi lại. Hãy nhớ rằng bạn cần lưu tên tệp nhật ký từ bên __construct()trong để có quyền truy cập vào nó từ _write()phương thức.

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

Hãy cẩn thận về điều này. Nếu có lỗi xảy ra trên trang web, bạn sẽ kết thúc với vô số email. Điều này tự nó sẽ kéo máy chủ xuống. Sau đó, bạn kết thúc với không chỉ một trang web bị hỏng, mà là một máy chủ không thể truy cập! Sau đó, bạn cuối cùng cũng phải xóa rất nhiều thư từ hàng đợi thư. Điều này đã xảy ra với tôi trong quá khứ
ProxiBlue

Đó là một điểm hay. Chúng tôi không tự mình quản lý máy chủ thư (Mandrill) nhưng mọi thứ vẫn có thể bị tắc nghẽn nhanh chóng nếu tất cả các ngoại lệ đột ngột bắt đầu tràn ngập vì một số lý do.
kalenjordan

Tôi luôn nghĩ rằng một thư xếp hàng sẽ là một mô-đun tuyệt vời. . Hàng đợi có thể có một bộ đếm và nếu một thông điệp giống hệt được đặt, nó có thể chỉ lên bộ đếm. Do đó, nếu bạn có 100 thư ngoại lệ, từ cùng một ngoại lệ, bạn sẽ chỉ nhận được 1 email, với 'các trường hợp xxx của email này'. Nó cũng sẽ cung cấp một điểm tuyệt vời để kiểm tra nếu email được gửi từ magento. - Tôi chỉ không có thời gian để viết cái này :(
ProxiBlue

7

Gửi email mọi ngoại lệ có thể sẽ dẫn đến rất nhiều thư.

Nó có thể là một lựa chọn tốt hơn để chỉ đăng nhập các ngoại lệ vào nhật ký ngoại lệ và gửi thư một lần một ngày cho chính bạn bằng cách sử dụng một cronjob trong linux

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

Và tùy ý làm sạch nó sau khi bạn gửi nó

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

Hoặc bạn có thể thực hiện nó mỗi giờ nếu bạn cần tần suất cao hơn.

Bằng cách này, không cần ghi đè lên bất kỳ tệp nào và giữ tải trên máy chủ liên tục gửi thư cho chính bạn.


Cảm ơn Sander. Tôi sẽ lập luận rằng mặc dù các trường hợp ngoại lệ đang ghi nhật ký là một vấn đề cần được giải quyết, do đó bạn sẽ có tỷ lệ ngoại lệ thấp được ghi lại. Tôi thích sự đơn giản của một công việc định kỳ để ghi nhật ký ngoại lệ, nhưng tôi không chắc rằng tôi thích ý tưởng xóa nhật ký mỗi khi nó được gửi qua email.
kalenjordan

+1; bởi vì cá nhân tôi cảm thấy đây là lựa chọn tốt nhất để làm điều này. Cảm ơn đã chia sẻ suy nghĩ của bạn :-)
Rajeev K Tomy

2

có lẽ bạn cũng có thể quan tâm đến việc tích hợp Magento / Monolog của tôi

https://github.com/aleron75/magemonolog

Trân trọng Alessandro


Làm tốt lắm, chỉ muốn biết nó có được thử nghiệm trên phiên bản magento 1.7 không? Nó không gửi email cho tôi trên phiên bản từ tính 1.7.0.2
Haris

1
Xin lỗi @Haris Tôi không biết nhưng e-mail chưa gửi có thể phụ thuộc vào cấu hình máy chủ email của bạn thay vì vào tiện ích mở rộng
Alessandro Ronchi

1

Tôi không thích việc triển khai trình soạn thảo tùy chỉnh của Mage :: logModel hoặc tôi không hiểu nó. Đối với tôi, nó không tận dụng thiết kế Zend_Log để cho phép n nhà văn. Tôi đã có một Nhật ký không phải là một Nhà văn. Do đó, tôi đã thực hiện một cách giải quyết để tận dụng tối đa lợi thế của Zend_Log và vẫn viết không nhiều mã, vì tôi tổng hợp một 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);
}
}

Nhân tiện, trong Magento 1.7 tôi chỉ nhận được một vài email. Mỗi email có một số ngoại lệ / lỗi cho một yêu cầu, tôi đoán vậy. Vì vậy, trang web thường xuyên cao sẽ vẫn dẫn đến nhiều email. Tôi sẽ có cái nhìn về điều đó. Bây giờ nó ổn cho tôi.


Cảm ơn Andreas. Bản thân tôi cũng không hiểu 100% vai trò của mô hình nhà văn so với mô hình nhật ký, nhưng dường như đây là nơi tự nhiên nhất để mở rộng Magento trong trường hợp này.
kalenjordan

Xin lưu ý XX_XXX_Model_Log là một nhà văn_model! Chỉ cần định cấu hình tệp config.xml của bạn và thêm trình soạn thảo email trong phương thức nâng cao để gửi một số thư. Có lẽ chúng ta đã hiểu lầm.
Andreas Dyballa

Xin lỗi tôi có nghĩa là mô hình nhà văn vs mô hình dòng nhà văn. Ở mức độ nào, giải pháp mà tôi đưa ra ở trên hoạt động tốt, và dường như có thể đọc được như thế này và cũng có ít SLOC hơn.
kalenjordan

Với giải pháp này, bạn có thể sử dụng Khung công tác Zend để ghi nhật ký Zend và định cấu hình bao nhiêu nhà văn bạn muốn với các bộ lọc và mức độ ưu tiên. Vì vậy, rất dễ dàng để tạo một trình soạn thảo (ưu tiên) có thể định cấu hình hơn nữa mà bạn có thể gửi với một cronjob Mage mỗi giờ qua thư.
Andreas Dyballa

0

Bạn cũng có thể sử dụng một mô-đun để tạo thông báo email hoặc nhận báo cáo hàng ngày của khách hàng có ngoại lệ:

Dưới đây là giải thích việc thực hiện: https://grafzahl-io.blogspot.de/2017/03/notifying-for-every-exception-in-magento.html

Đây là mô-đun để theo dõi lỗi và các sự kiện khác (thậm chí áp dụng giảm giá cho khách hàng nếu anh ta có ngoại lệ): https://grafzahl.io/notify-module

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.