Jak mogę otrzymywać powiadomienia e-mail o wyjątkach?

14

Jak skonfigurować powiadomienia e-mail o wyjątkach, które są rejestrowane lub zgłaszane w witrynie?

AKTUALIZACJA: Kilka osób skomentowało fakt, że możesz spodziewać się zbyt dużej liczby wiadomości e-mail, jeśli otrzymałeś każdy wyjątek. Zwykle chcę, aby mój dziennik wyjątków był dość lekki. Wszystko, co tam się dzieje, uważam za wyjątek. Jeśli jest to oczekiwana funkcjonalność i nie stanowi problemu, to lubię wychwycić wyjątek, w razie potrzeby zaloguj go do innego pliku (być może system.log), ale nie loguj go do dziennika wyjątku.log.

Ale jeśli masz dużo hałasu w swoim wyjątku. Dziennik, którego nie chcesz czyścić, prawdopodobnie nie będziesz chciał tego robić.

kalenjordan
źródło
6
WYPŁACISZ

Odpowiedzi:

4

Możesz użyć Magento Hackthon Logger do tego zadania: https://github.com/firegento/firegento-logger/

To nie jest pytanie, ale istnieją rozszerzenia dla rozszerzenia: https://github.com/magento-hackathon/LoggerSentry/

Co chcę powiedzieć: łatwo jest wdrożyć własnego „Writer” :-)

Paul Hachmang
źródło
Ładny! Dzięki Paul. Czy to pozwoliłoby ci przesyłać sobie tylko dzienniki wyjątków? To był główny przypadek użycia, który mnie interesował i myślę, że coś, co może ogólnie mieć zastosowanie do wielu instalacji Magento.
kalenjordan
Możesz skonfigurować różne treshholde, co zrobić z logami, wysyłać wyjątki do XMPP (czat gmail), wysyłać błędy na pocztę i na przykład rejestrować powiadomienia w bazie danych.
Paul Hachmang
Tylko do wiadomości, ten projekt został przeniesiony ... github.com/firegento/firegento-logger
Scruffy Paws
@PaulHachmang pierwszy link github.com/magento-hackathon/Logger nie żyje. Może chcesz to zaktualizować.
SR_Magento
8

Nie wydawało się to tak łatwo dostępne, jak myślałem, że powinno wynikać z niektórych poszukiwań, więc zamieszczam pytanie / odpowiedź na przyszłe odniesienia.

Zgłaszane wyjątki

Możesz włączyć powiadomienia e-mail o wyjątkach zgłaszanych za pomocą error / local.xml. Możesz skopiować swój errors/local.xml.templateplik na `error / local.xml 'i wpisać adres e-mail oraz wiersz tematu, którego chcesz użyć.

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

Następnie, jeśli wyjątki zostaną zgłoszone i wykryte przez system obsługi błędów Magento, w którym użytkownik końcowy wyświetla ekran raportu o błędach, otrzymasz powiadomienie e-mailem.

Zarejestrowane wyjątki

Jeśli chcesz także otrzymywać powiadomienia e-mail o wyjątkach, które nie są zgłaszane, ale są rejestrowane, musisz przejść nieco dalej.

Najpierw zastąp klasę zapisującą dziennik rdzenia .

Gdy to zrobisz, po prostu wpisz kod, aby zrobić sobie wiadomość e-mail po zarejestrowaniu wyjątku. Pamiętaj, że musisz zapisać nazwę pliku dziennika od wewnątrz __construct(), aby mieć do niej dostęp z tej _write()metody.

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
źródło
Uważaj na to. Jeśli coś pójdzie nie tak na stronie, skończy się zalew e-maili. To samo z siebie pociągnęłoby sam serwer w dół. W efekcie powstaje nie tylko zepsuta witryna, ale także niedostępny serwer! W rezultacie musisz również wyczyścić wiele wiadomości e-mail z kolejki poczty. Zdarzyło mi się to w przeszłości
ProxiBlue
Trafne spostrzeżenie. Nie sami zarządzamy serwerem poczty (Mandrill), ale mimo to wszystko może się szybko zatkać, jeśli z jakiegoś powodu nagle zaczną zalewać wszystkie wyjątki.
kalenjordan
Zawsze myślałem, że kolejka pocztowa będzie świetnym modułem. (jakieś osoby przyjmujące dla jednego hostowanego na github / wiesz o jednym?) - w zasadzie wszelkie wiadomości e-mail wysyłane przez magento w celu umieszczenia w kolejce pocztowej, z cronem, który działa co x minut i wysyła następny e-mail w kolejce. Que może mieć licznik, a jeśli zostanie umieszczony identyczny komunikat, może po prostu zwiększyć licznik. Zatem jeśli masz 100 wiadomości o wyjątkach, z tego samego wyjątku otrzymasz tylko 1 wiadomość e-mail z „xxx wystąpieniami tego e-maila”. Byłoby to również świetny punkt, aby sprawdzić, czy e-maile zostały wysłane z Magento. - Po prostu nie mam czasu na napisanie tego :(
ProxiBlue
7

Wysłanie każdego wyjątku pocztą e-mail spowoduje prawdopodobnie DUŻO poczty.

Lepszym rozwiązaniem może być po prostu rejestrowanie wyjątków w dzienniku wyjątków i wiadomości e-mail, które raz dziennie dla siebie za pomocą usługi cronjob w systemie Linux

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

I opcjonalnie wyczyść go po wysłaniu

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

Lub możesz wykonać go co godzinę, jeśli potrzebujesz wyższej częstotliwości.

W ten sposób nie ma potrzeby nadpisywania żadnych plików i utrzymywania obciążenia serwera, który stale wysyła do Ciebie wiadomości e-mail.

Sander Mangel
źródło
Dzięki Sander. Twierdziłbym jednak, że rejestrowane wyjątki to problem, który należy rozwiązać, dlatego rejestrowanie wyjątków powinno być rzadkie. Podoba mi się prostota zadania cron do przesyłania dziennika wyjątków, ale nie jestem pewien, czy podoba mi się pomysł czyszczenia dziennika za każdym razem, gdy jest on wysyłany pocztą e-mail.
kalenjordan
+1; ponieważ osobiście uważam, że jest to najlepsza opcja, aby to zrobić. Dzięki za podzielenie się swoimi przemyśleniami :-)
Rajeev K Tomy
2

być może możesz być zainteresowany moją integracją Magento / Monolog

https://github.com/aleron75/magemonolog

Pozdrawiam Alessandro

Alessandro Ronchi
źródło
Dobra robota, po prostu chcesz wiedzieć, czy jest testowany na Magento w wersji 1.7? Nie wysyła do mnie wiadomości e-mail na temat wersji magneto 1.7.0.2
Haris,
1
Niestety @Haris Nie wiem, ale niewysłana wiadomość e-mail prawdopodobnie zależy od konfiguracji serwera e-mail, a nie od rozszerzenia
Alessandro Ronchi,
1

Nie podoba mi się implementacja niestandardowego modułu pisarzaMage :: log lub nie rozumiem tego. Dla mnie nie korzysta z projektu Zend_Log, aby umożliwić n pisarzom. Wziąłbym dziennik, a nie pisarza. Dlatego dokonałem obejścia, aby w pełni wykorzystać Zend_Log i nadal pisać niewiele kodu, ponieważ agreguję 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);
}
}

Nawiasem mówiąc, w Magento 1.7 otrzymuję tylko kilka e-maili. Każdy e-mail zawiera pewne wyjątki / błędy dotyczące jednego żądania. Tak często odwiedzana witryna nadal będzie generować wiele wiadomości e-mail. Spojrzę na to. Do tej pory jest dla mnie w porządku.

Andreas Dyballa
źródło
Dzięki Andreas. Nie rozumiem w 100% roli modelu pisarza w porównaniu z modelem dziennika, ale wydawało się to najbardziej naturalnym miejscem do rozszerzenia Magento w tym przypadku.
kalenjordan
Uwaga: XX_XXX_Model_Log to model writer_! Wystarczy skonfigurować plik config.xml i dodać program do pisania wiadomości e-mail w celu ulepszenia, aby wysłać również niektóre wiadomości e-mail. Być może źle zrozumieliśmy.
Andreas Dyballa
Przepraszam, miałem na myśli model pisarza vs model strumienia pisarza. W każdym razie rozwiązanie, które podałem powyżej, działa dobrze i wydaje się być tak czytelne jak to, a także ma mniej SLOC.
kalenjordan
Dzięki temu rozwiązaniu możesz korzystać z Zend Framework do rejestrowania Zend i konfigurować dowolną liczbę pisarzy z filtrami i priorytetem. Dzięki temu bardzo łatwo jest skonfigurować (priorytet) dodatkowo program do zapisywania plików, który można wysyłać za pomocą magicznej usługi cronjob co godzinę pocztą.
Andreas Dyballa