Come posso ricevere notifiche e-mail per le eccezioni?


14

Come posso impostare le notifiche e-mail per le eccezioni che vengono registrate o generate sul sito?

AGGIORNAMENTO: Alcune persone hanno commentato il fatto che potresti aspettarti di ricevere troppe email se hai ricevuto ogni eccezione via email. Tendo a mantenere il registro delle eccezioni piuttosto leggero. Tutto ciò che accade lì lo considero un'eccezione. Se è prevista la funzionalità e non un problema, mi piace catturare l'eccezione, eventualmente registrarla in un altro file (forse system.log) se necessario, ma non registrarla su exception.log.

Ma se hai un sacco di rumore nella tua exception.log che non vuoi pulire, probabilmente non vorrai farlo.


6
CRASH GMAIL
benmarks

Risposte:


4

È possibile utilizzare Magento Hackthon Logger per questo lavoro: https://github.com/firegento/firegento-logger/

Non è la domanda, ma ci sono estensioni per l'estensione: https://github.com/magento-hackathon/LoggerSentry/

Quello che voglio dire: è facile implementare il tuo "Writer" :-)


Bello! Grazie Paolo Ciò ti consentirebbe di inviare tramite email solo i log delle eccezioni? Quello era il caso d'uso principale a cui ero interessato e penso che qualcosa potrebbe essere generalmente applicabile a molte installazioni di Magento.
Kalenjordan,

È possibile impostare varie treshholds che cosa fare con i registri, inviare eccezioni a XMPP (chat di Gmail), inviare errori alla posta e, ad esempio, registrare gli avvisi nel database.
Paul Hachmang,

Cordiali saluti, questo progetto è stato spostato ... github.com/firegento/firegento-logger
Scruffy Paws

@PaulHachmang il primo link github.com/magento-hackathon/Logger è morto. Potrebbe volerlo aggiornare.
SR_Magento,

8

Questo non mi è sembrato facilmente accessibile come pensavo dovesse essere da qualche ricerca che ho fatto, quindi sto postando una domanda domanda / risposta per riferimento futuro.

Eccezioni generate

È possibile abilitare le notifiche e-mail per le eccezioni generate mediante errori / local.xml. Puoi copiarlo errors/local.xml.templatein `errors / local.xml 'e rilasciare l'indirizzo e-mail e l'oggetto che desideri utilizzare.

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

Quindi, se qualche eccezione viene generata e rilevata dal sistema di gestione degli errori di Magento, in cui viene visualizzata una schermata di segnalazione errori all'utente finale, riceverai una notifica via e-mail.

Eccezioni registrate

Se desideri anche ricevere notifiche via email per le eccezioni che non vengono generate ma piuttosto vengono registrate, dovrai andare un po 'più in là.

Innanzitutto, sovrascrivere la classe principale del writer di log .

Una volta che lo hai fatto, inserisci il codice per spararti un'e-mail dopo aver registrato l'eccezione. Ricordare che è necessario salvare il nome del file di registro all'interno __construct()per poter accedere ad esso dal _write()metodo.

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

Stai attento a questo. Se qualcosa va storto sul sito, finirai con un flusso di e-mail. Questo di per sé trascinerebbe il server stesso verso il basso. Quindi si finisce con non solo un sito rotto, ma un server inaccessibile! Quindi si finisce per cancellare anche molte e-mail dalla coda di posta. Questo mi è successo in passato
ProxiBlue,

È un buon punto. Non stiamo gestendo noi stessi il server di posta (Mandrill), ma le cose potrebbero intasarsi rapidamente se tutte le eccezioni improvvise iniziassero a inondare per qualche motivo.
Kalenjordan,

Ho sempre pensato che una mail sarebbe stata un ottimo modulo. (qualsiasi acquirente per uno ospitato su github / ne conosci uno?) - in pratica qualsiasi e-mail che magento invia per essere lasciato cadere in una mail que, con un cron che viene eseguito ogni x minuti e invia l'e-mail successiva in que. La coda potrebbe avere un contatore e se viene inserito un messaggio identico, potrebbe semplicemente alzare il contatore. Pertanto, se hai 100 messaggi di eccezione, dalla stessa eccezione, otterrai solo 1 e-mail, con un 'xxx istanze di questa e-mail'. Sarebbe anche un ottimo punto per verificare se le e-mail sono state inviate da Magento. - Non ho il tempo di scrivere questo :(
ProxiBlue

7

L'invio tramite e-mail di ogni eccezione comporterà probabilmente MOLTA posta.

Potrebbe essere un'opzione migliore per registrare le eccezioni nel registro delle eccezioni e inviarle una volta al giorno a te stesso usando un cronjob in linux

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

E facoltativamente pulirlo dopo averlo inviato per posta

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

Oppure potresti eseguirlo ogni ora se hai bisogno di una frequenza più alta.

In questo modo non è necessario sovrascrivere alcun file e mantenere il carico sul server che invia costantemente e-mail a te stesso.


Grazie Sander. Direi però che le eccezioni che stanno registrando sono un problema che deve essere risolto, quindi dovresti avere una bassa occorrenza di eccezioni registrate. Mi piace la semplicità di un processo cron per reindirizzare il registro delle eccezioni, ma non sono sicuro che mi piace l'idea di cancellare il registro ogni volta che viene inviato tramite e-mail.
Kalenjordan,

+1; perché personalmente ritengo che questa sia l'opzione migliore per farlo. Grazie per aver condiviso i tuoi pensieri :-)
Rajeev K Tomy il

2

forse potresti anche essere interessato alla mia integrazione Magento / Monolog

https://github.com/aleron75/magemonolog

Saluti Alessandro


Bel lavoro fatto, vuoi solo sapere se è testato su magento versione 1.7? Non invia e-mail per me su magneto versione 1.7.0.2
Haris

1
Scusa @Haris non lo so, ma l'e-mail non inviata probabilmente dipende dalla configurazione del tuo server e-mail piuttosto che dall'estensione
Alessandro Ronchi,

1

Non mi piace l'implementazione del modello writer personalizzato di Mage :: log o non lo capisco. Per me non sfrutta il design di Zend_Log per abilitare n writer. Avrei preso un diario non uno scrittore. Pertanto ho preso una soluzione alternativa per sfruttare appieno Zend_Log e scrivere ancora poco codice, poiché aggrego un 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);
}
}

A proposito in Magento 1.7 ricevo solo poche e-mail. Ogni email ha alcune eccezioni / errori per una richiesta, immagino. Un sito così frequentato comporterà comunque molte e-mail. Lo guarderò. Ormai va bene per me.


Grazie Andreas. Non capisco nemmeno io il ruolo del modello di scrittore rispetto al modello di registro, ma in questo caso mi è sembrato il posto più naturale per estendere Magento.
Kalenjordan,

Nota che XX_XXX_Model_Log è un writer_model! Configura config.xml e aggiungi un writer di posta elettronica nel metodo boost per inviare anche alcune e-mail. Forse abbiamo frainteso.
Andreas Dyballa,

Mi dispiace, intendevo il modello del writer contro il modello del flusso del writer. Ad ogni modo, la soluzione che ho dato sopra funziona bene, sembra essere leggibile come questa e ha anche meno SLOC.
Kalenjordan,

Con questa soluzione è possibile utilizzare Zend Framework per Zend-logging e configurare il numero di writer desiderato con filtri e priorità. Quindi è molto facile creare un ulteriore configurabile (prioritario) fe scrittore di registrazione file che puoi inviare con un cronjob Mage ogni ora via mail.
Andreas Dyballa,

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.