Wie kann ich E-Mail-Benachrichtigungen für Ausnahmen erhalten?


14

Wie richte ich E-Mail-Benachrichtigungen für Ausnahmen ein, die entweder protokolliert oder auf der Site ausgelöst werden?

UPDATE: Einige Leute haben die Tatsache kommentiert, dass Sie möglicherweise zu viele E-Mails erhalten, wenn Sie jede Ausnahme per E-Mail erhalten. Ich neige dazu, mein Ausnahmeprotokoll ziemlich leicht zu halten. Alles, was dort reinkommt, sehe ich als Ausnahme an. Wenn es sich um die erwartete Funktionalität und kein Problem handelt, möchte ich die Ausnahme abfangen und sie möglicherweise in einer anderen Datei (möglicherweise system.log) protokollieren, aber nicht in exception.log.

Wenn Sie jedoch eine Menge Rauschen in Ihrem exception.log haben, das Sie nicht bereinigen möchten, werden Sie dies wahrscheinlich nicht tun wollen.


6
Sie werden
Gmail

Antworten:


4

Sie können den Magento Hackthon Logger für diesen Job verwenden: https://github.com/firegento/firegento-logger/

Es ist nicht die Frage, aber es gibt Erweiterungen für die Erweiterung: https://github.com/magento-hackathon/LoggerSentry/

Was ich sagen möchte: Es ist einfach, einen eigenen "Writer" zu implementieren :-)


Nett! Vielen Dank, Paul. Könnten Sie sich dann nur Ausnahmenprotokolle per E-Mail zusenden? Das war der primäre Anwendungsfall, an dem ich interessiert war, und ich denke, dass er für viele Magento-Installationen allgemein anwendbar sein könnte.
Kalenjordan

Sie können verschiedene Einstellungen für die Protokollierung vornehmen, Ausnahmen an XMPP (Google Mail-Chat) senden, Fehler an E-Mails senden und die Benachrichtigungen beispielsweise in der Datenbank protokollieren.
Paul Hachmang

Nur zu Ihrer Information, dieses Projekt wurde verschoben ... github.com/firegento/firegento-logger
Scruffy Paws

@PaulHachmang der erste Link github.com/magento-hackathon/Logger ist tot. Vielleicht möchten Sie es aktualisieren.
SR_Magento

8

Dies schien mir nicht so leicht zugänglich zu sein, wie ich es mir aufgrund einiger meiner Recherchen vorgestellt hatte. Deshalb poste ich eine Frage / Antwort, um später darauf zurückgreifen zu können.

Ausnahmen ausgelöst

Sie können E-Mail-Benachrichtigungen für Ausnahmen aktivieren, die mit errors / local.xml ausgelöst werden. Sie können Ihre errors/local.xml.templatenach `errors / local.xml 'kopieren und die E-Mail-Adresse und die Betreffzeile eingeben, die Sie verwenden möchten.

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

Wenn das Fehlerbehandlungssystem von Magento Ausnahmen auslöst und diese abfängt und dem Endbenutzer ein Fehlerbericht angezeigt wird, erhalten Sie eine E-Mail-Benachrichtigung.

Protokollierte Ausnahmen

Wenn Sie auch E-Mail-Benachrichtigungen für Ausnahmen erhalten möchten, die nicht ausgelöst, sondern protokolliert werden, müssen Sie sich ein wenig näher damit befassen.

Zuerst überschreiben Sie die Log - Writer - Klasse Kern .

Sobald Sie dies getan haben, geben Sie einfach den Code ein, um sich eine E-Mail zu senden, nachdem die Ausnahme protokolliert wurde. Denken Sie daran, dass Sie den Protokolldateinamen in der Datei speichern müssen, um __construct()von der _write()Methode aus darauf zugreifen zu können .

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

Sei vorsichtig damit. Wenn auf der Website etwas schief geht, werden Sie eine Flut von E-Mails erhalten. Dies an sich würde den Server selbst nach unten ziehen. Sie haben dann nicht nur eine kaputte Site, sondern einen unzugänglichen Server! Sie müssen dann auch viele E-Mails aus der E-Mail-Warteschlange löschen. Dies ist mir in der Vergangenheit passiert
ProxiBlue

Das ist ein guter Punkt. Wir verwalten den Mail-Server nicht selbst (Mandrill), aber es könnte trotzdem schnell zu einer Verstopfung kommen, wenn aus irgendeinem Grund plötzlich Ausnahmen auftreten.
Kalenjordan

Ich dachte immer, eine Mail-Que wäre ein großartiges Modul. (Gibt es Abnehmer für einen, der auf github gehostet wird / weißt du von einem?) - Im Grunde werden alle von Magento gesendeten E-Mails in eine E-Mail-Warteschlange mit einem Cron verschoben, der alle x Minuten ausgeführt wird und die nächste E-Mail in der Warteschlange sendet. Die Warteschlange könnte einen Zähler haben, und wenn eine identische Nachricht platziert wird, könnte sie den Zähler gerade höher stellen. Wenn Sie also 100 Ausnahmebedingungsnachrichten aus derselben Ausnahme haben, erhalten Sie nur eine E-Mail mit der Angabe "xxx Exemplare dieser E-Mail". Es wäre auch ein guter Punkt, um zu überprüfen, ob E-Mails von Magento gesendet wurden. - Ich habe einfach nicht die Zeit, dieses zu schreiben :(
ProxiBlue

7

Das Versenden jeder Ausnahme per E-Mail führt wahrscheinlich zu VIELEN E-Mails.

Es könnte eine bessere Option sein, die Ausnahmen nur im Ausnahmeprotokoll zu protokollieren und diese einmal täglich mit einem Cronjob unter Linux an sich selbst zu senden

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

Und optional bereinigen, nachdem Sie es verschickt haben

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

Oder Sie können es jede Stunde ausführen, wenn Sie eine höhere Frequenz benötigen.

Auf diese Weise müssen Sie keine Dateien überschreiben und die Last auf dem Server, der ständig E-Mails an Sie selbst sendet, gering halten.


Danke Sander. Ich würde jedoch argumentieren, dass Ausnahmen, die protokolliert werden, ein Problem sind, das behoben werden muss, sodass die Anzahl der protokollierten Ausnahmen gering sein sollte. Ich mag die Einfachheit eines Cron-Jobs, das Ausnahmeprotokoll zu übermitteln, aber ich bin mir nicht sicher, ob ich die Idee mag, das Protokoll jedes Mal zu löschen, wenn es per E-Mail gesendet wird.
Kalenjordan

+1; weil ich persönlich der Meinung bin, dass dies die beste Option ist, um dies zu tun. Vielen Dank für Ihre Meinung :-)
Rajeev K Tomy

2

Vielleicht interessieren Sie sich auch für meine Magento / Monolog-Integration

https://github.com/aleron75/magemonolog

Grüße Alessandro


Gute Arbeit geleistet. Möchten Sie wissen, ob es auf Magento Version 1.7 getestet wurde? Es sendet keine E-Mail für mich auf Magneto Version 1.7.0.2
Haris

1
Sorry @Haris Ich weiß nicht, aber eine nicht gesendete E-Mail hängt wahrscheinlich eher von Ihrer E-Mail-Server-Konfiguration als von der Erweiterung ab
Alessandro Ronchi

1

Die Implementierung von Mage :: logs benutzerdefiniertem writerModel gefällt mir nicht oder ich verstehe es nicht. Für mich nutzt es Zend_Log Design nicht aus, um n Autoren zu ermöglichen. Ich hätte ein Log genommen, kein Writer. Daher habe ich einen Workaround gemacht, um den vollen Nutzen aus dem Zend_Log zu ziehen und trotzdem nicht viel Code zu schreiben, da ich ein Zend_log aggregiere.

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

Übrigens bekomme ich in Magento 1.7 nur ein paar Emails. Jede E-Mail hat einige Ausnahmen / Fehler für eine Anfrage, denke ich. So hoch frequentierte Website wird immer noch in vielen E-Mails führen. Das werde ich mir ansehen. Inzwischen ist es okay für mich.


Danke Andreas. Ich verstehe die Rolle des Writer-Modells nicht 100% ig im Vergleich zum Log-Modell selbst, aber es schien der natürlichste Ort zu sein, Magento in diesem Fall zu erweitern.
Kalenjordan

Bitte beachten Sie, dass XX_XXX_Model_Log ein writer_model ist! Konfigurieren Sie einfach Ihre config.xml und fügen Sie einen E-Mail-Writer in method enhancement hinzu, um auch einige E-Mails zu versenden. Vielleicht haben wir falsch verstanden.
Andreas Dyballa

Tut mir leid, ich meinte Writer-Modell vs Writer Stream-Modell. Auf jeden Fall funktioniert die Lösung, die ich oben angegeben habe, einwandfrei und scheint so lesbar zu sein wie diese und hat auch weniger SLOC.
Kalenjordan

Mit dieser Lösung können Sie das Zend Framework für die Zend-Protokollierung verwenden und beliebig viele Writer mit Filtern und Prioritäten konfigurieren. So ist es sehr einfach, einen konfigurierbaren (Priorität) weiteren zB File-Logging-Writer zu erstellen, den Sie mit einem Mage-Cronjob stündlich per Mail versenden können.
Andreas Dyballa

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.