¿Cómo puedo recibir notificaciones por correo electrónico para excepciones?

14

¿Cómo configuro las notificaciones por correo electrónico para las excepciones que se registran o se lanzan en el sitio?

ACTUALIZACIÓN: Algunas personas han comentado sobre el hecho de que puede esperar recibir demasiados correos electrónicos si recibe todas las excepciones por correo electrónico. Tiendo a mantener mi registro de excepciones bastante ligero. Todo lo que entra allí lo veo, bueno, como una excepción. Si es una funcionalidad esperada y no es un problema, me gusta detectar la excepción, posiblemente registrarla en otro archivo (tal vez system.log) si es necesario, pero no registrarla en exception.log.

Pero si tiene mucho ruido en su excepción.log que no desea limpiar, es probable que no quiera hacer esto.

kalenjordan
fuente
66
CRASH GMAIL
puntos de referencia el

Respuestas:

4

Puede usar el Magento Hackthon Logger para este trabajo: https://github.com/firegento/firegento-logger/

No es la pregunta, pero hay extensiones para la extensión: https://github.com/magento-hackathon/LoggerSentry/

Lo que quiero decir: es fácil implementar su propio "escritor" :-)

Paul Hachmang
fuente
¡Agradable! Gracias paul ¿Te permitiría enviarte correos electrónicos solo con registros de excepciones? Ese fue el caso de uso principal en el que estaba interesado y creo que algo que podría ser generalmente aplicable a muchas instalaciones de Magento.
kalenjordan
Puede configurar varias direcciones para saber qué hacer con los registros, enviar Excepciones a XMPP (chat de gmail), enviar errores al correo y registrar los avisos en la base de datos, por ejemplo.
Paul Hachmang
Solo para su información, este proyecto se ha movido ... github.com/firegento/firegento-logger
Scruffy Paws
@PaulHachmang el primer enlace github.com/magento-hackathon/Logger está muerto. Puede querer actualizarlo.
SR_Magento
8

Esto no parecía tan accesible como pensé que debería ser de algunas búsquedas que hice, así que estoy publicando una pregunta / respuesta para futuras referencias.

Excepciones lanzadas

Puede habilitar las notificaciones por correo electrónico para las excepciones que se generan con errores / local.xml. Puede copiar su errors/local.xml.templateen `errors / local.xml 'y colocar la dirección de correo electrónico y la línea de asunto que desea usar.

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

Luego, si el sistema de manejo de errores de Magento arroja y captura alguna excepción, donde se muestra una pantalla de informe de error al usuario final, recibirá una notificación por correo electrónico.

Excepciones registradas

Si también desea recibir notificaciones por correo electrónico para las excepciones que no se lanzan, sino que se registran, deberá avanzar un poco más bajo el capó.

Primero, anule la clase principal de escritor de registros .

Una vez que hayas hecho eso, solo coloca el código para enviarte un correo electrónico después de que se registre la excepción. Recuerde que debe guardar el nombre del archivo de registro desde dentro __construct()para poder acceder a él desde el _write()método.

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
fuente
Ten cuidado con esto. Si algo sale mal en el sitio, terminará con una avalancha de correos electrónicos. Esto en sí mismo arrastraría el servidor hacia abajo. ¡Entonces terminas no solo con un sitio roto, sino con un servidor inaccesible! Luego terminas teniendo que borrar también muchos correos de la lista de correos. Esto me sucedió en el pasado
ProxiBlue
Ese es un buen punto. No estamos administrando el servidor de correo nosotros mismos (Mandrill), pero aún así las cosas podrían atascarse rápidamente si, de repente, algunas excepciones comenzaran a inundarse.
kalenjordan
Siempre pensé que un correo que sería un gran módulo. (¿Alguna persona que haya alojado en github / sabe de uno?) - básicamente, cualquier correo electrónico enviado por magento para ser enviado a una cola de correo, con un cron que se ejecuta cada x minutos y envía el siguiente correo electrónico en la cola. El que podría tener un contador y si se coloca un mensaje idéntico, podría subir el contador. Por lo tanto, si tiene 100 mensajes de excepción, de la misma excepción, solo recibirá 1 correo electrónico, con una 'xxx instancias de este correo electrónico'. También sería muy útil verificar si se enviaron correos electrónicos desde magento. - Simplemente no tengo tiempo para escribir este :(
ProxiBlue
7

Enviar por correo electrónico todas las excepciones probablemente dará como resultado MUCHO correo.

Podría ser una mejor opción simplemente registrar las excepciones en el registro de excepciones y enviarlas por correo una vez al día usando un cronjob en Linux

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

Y, opcionalmente, limpiarlo después de enviarlo por correo

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

O podría ejecutarlo cada hora si necesita una frecuencia más alta.

De esta manera no hay necesidad de sobrescribir ningún archivo y mantener la carga en el servidor que constantemente se envía correos a usted mismo.

Sander Mangel
fuente
Gracias Sander Sin embargo, argumentaría que las excepciones que están registrando son un problema que debe resolverse, por lo que debe tener una baja ocurrencia de excepciones que se registren. Me gusta la simplicidad de un trabajo cron para canalizar el registro de excepciones, pero no estoy seguro de que me guste la idea de borrar el registro cada vez que se envía por correo electrónico.
kalenjordan
+1; porque personalmente siento que esta es la mejor opción para hacer esto. Gracias por compartir tus pensamientos :-)
Rajeev K Tomy
2

quizás también te pueda interesar mi integración de Magento / Monolog

https://github.com/aleron75/magemonolog

Saludos Alessandro

Alessandro Ronchi
fuente
Buen trabajo hecho, ¿solo quieres saber si está probado en magento versión 1.7? No me envía un correo electrónico en magneto versión 1.7.0.2
Haris
1
Lo siento @ Haris, no lo sé, pero el correo electrónico no enviado probablemente depende de la configuración de su servidor de correo electrónico en lugar de la extensión
Alessandro Ronchi
1

No me gusta la implementación de Mage :: log's custom writerModel o no lo entiendo. Para mí, no aprovecha el diseño de Zend_Log para habilitar n escritores. Hubiera tomado un registro, no un escritor. Por lo tanto, hice una solución alternativa para aprovechar al máximo el Zend_Log y aún no escribir mucho código, ya que agrego 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);
}
}

Por cierto, en Magento 1.7 recibo solo unos pocos correos electrónicos. Supongo que cada correo electrónico tiene algunas excepciones / errores para una solicitud. Por lo tanto, un sitio muy frecuentado aún generará muchos correos electrónicos. Voy a tener que ver eso. Por ahora está bien para mí.

Andreas Dyballa
fuente
Gracias Andreas Tampoco entiendo al 100% el papel del modelo de escritor frente al modelo de registro, pero parecía el lugar más natural para extender Magento en este caso.
kalenjordan
¡Tenga en cuenta que XX_XXX_Model_Log es un escritor_modelo! Simplemente configure su config.xml y agregue un escritor de correo electrónico en la mejora del método para enviar algunos correos también. Tal vez lo entendimos mal.
Andreas Dyballa
Lo siento, quise decir modelo de escritor vs modelo de secuencia de escritor En cualquier caso, la solución que proporcioné anteriormente funciona bien y parece ser tan legible como esta y también tiene menos SLOC.
kalenjordan
Con esta solución, puede utilizar Zend Framework para el registro de Zend y configurar tantos escritores como desee con filtros y prioridad. Por lo tanto, es muy fácil hacer un escritor de registro de archivos configurable (prioridad) adicional que puede enviar con un cronjob de Mage cada hora por correo.
Andreas Dyballa