Як я можу отримувати сповіщення електронною поштою про винятки?


14

Як налаштувати сповіщення електронною поштою на винятки, які реєструються або викидаються на сайт?

ОНОВЛЕННЯ: Кілька людей прокоментували той факт, що ви можете розраховувати отримати занадто багато електронних листів, якщо всі винятки надсилаються вам. Я прагну, щоб журнал винятків був досить світлим. Все, що там є, я вважаю винятком. Якщо це очікувана функціональність і не є проблемою, я хотів би вийняти виняток, можливо, занести його до іншого файлу (можливо, system.log), якщо це потрібно, але не записувати його до изключення.log.

Але якщо у вашому винятку.log є багато шуму, який ви не хочете чистити, ви, ймовірно, не захочете цього робити.


6
ВИ БУДЕТЕ
КРЕШКОГО

Відповіді:


4

Ви можете використовувати Magento Hackthon Logger для цієї роботи: https://github.com/firegento/firegento-logger/

Це не питання, але для розширення є розширення: https://github.com/magento-hackathon/LoggerSentry/

Що я хочу сказати: легко реалізувати власний "Writer" :-)


Приємно! Спасибі Пол. Чи це дозволить вам надсилати електронною поштою лише журнали виключень? Це був первинний варіант використання, який мене зацікавив, і я вважаю, що може бути загальноприйнятним для багатьох установок Magento.
kalenjordan

Ви можете налаштувати різні пороги, що робити з журналами, надсилати винятки до XMPP (чат gmail), надсилати помилки на пошту та записувати повідомлення в базу даних, наприклад.
Пол Хачман

Тільки 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

Я завжди думав, що черга електронної пошти буде чудовим модулем. . У черги може бути лічильник, і якщо буде розміщено ідентичне повідомлення, воно може просто підняти лічильник. Таким чином, якщо у вас є 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 1.7? Він не надсилає мені електронну пошту у версії 1.7.0.2 магніто
Haris

1
Вибачте @Haris Я не знаю, але невідома електронна пошта, швидше за все, залежить від конфігурації вашого сервера електронної пошти, а не від розширення
Alessandro Ronchi

1

Мені не подобається реалізація користувальницького сценарію Mage :: logModel або я не розумію цього. Для мене це не використовує дизайн Zend_Log для включення російських письменників. Я взяв би журнал не письменника. Тому я зробив обхід, щоб повністю використати перевагу 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 я отримую лише кілька листів. Я думаю, кожен електронний лист має деякі винятки / помилки для одного запиту. Так високочасто відвідуваний сайт все одно призведе до багатьох електронних листів. Я буду дивитись на це. На даний момент для мене це нормально.


Спасибі Андреас. Я на 100% не розумію і ролі моделі сценариста проти моделі журналу, але, здавалося, найприродніше місце для поширення Magento в цьому випадку.
kalenjordan

Зверніть увагу, XX_XXX_Model_Log - це сценарій_модель! Просто налаштуйте config.xml і додайте електронний письмовий пристрій у поліпшенні методу, щоб надсилати також деякі листи. Можливо, ми неправильно зрозуміли.
Andreas Dyballa

Вибачте, що я мав на увазі модель сценариста проти моделі потокового сценариста. У будь-якому випадку, рішення, яке я дав вище, працює чудово, і, здається, настільки ж читабельний, як це, а також має менше SLOC.
kalenjordan

За допомогою цього рішення ви можете використовувати Zend Framework для Zend-реєстрації та налаштовувати стільки авторів, які вам потрібні, з фільтрами та пріоритетом. Тому дуже легко зробити налаштований (пріоритетний) подальший запис файлів із записом файлів, який ви можете надсилати щороку за допомогою Mage cronjob поштою.
Андреас Дібалла

0

Ви також можете використовувати модуль для створення сповіщень електронною поштою або отримання щоденних звітів клієнтів, які отримали винятки:

Тут пояснюється реалізація: https://grafzahl-io.blogspot.de/2017/03/notifications-for-every-exception-in-magento.html

Це модуль для моніторингу помилок та інших подій (навіть застосуйте знижку до клієнта, якщо він отримав виняток): https://grafzahl.io/notify-module

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.