Como posso receber notificações por email para exceções?

14

Como configurar notificações por email para exceções registradas ou lançadas no site?

ATUALIZAÇÃO: algumas pessoas comentaram o fato de que você pode esperar receber muitos e-mails se você receber todas as exceções por e-mail. Costumo gostar de manter o meu registro de exceções bastante leve. Tudo o que entra lá eu vejo como, também, uma exceção. Se a funcionalidade for esperada e não for um problema, eu gostaria de capturar a exceção, possivelmente registrá-la em outro arquivo (talvez system.log), se necessário, mas não registrá-la em exception.log.

Mas se você tiver muito ruído em sua exceção.log que não deseja limpar, provavelmente não vai querer fazer isso.

kalenjordan
fonte
6
Você vai
bater

Respostas:

4

Você pode usar o Magento Hackthon Logger para este trabalho: https://github.com/firegento/firegento-logger/

Não é a questão, mas existem extensões para a extensão: https://github.com/magento-hackathon/LoggerSentry/

O que eu quero dizer: É fácil implementar seu próprio "Writer" :-)

Paul Hachmang
fonte
Agradável! Obrigado Paul. Isso permitiria que você envie por email apenas logs de exceção? Esse era o principal caso de uso em que eu estava interessado e acho que algo que poderia ser geralmente aplicável a muitas instalações do Magento.
kalenjordan
Você pode configurar várias áreas rurais o que fazer com os logs, enviar exceções para o XMPP (chat do gmail), enviar erros para o correio e registrar os avisos no banco de dados, por exemplo.
Paul Hachmang
Apenas FYI, este projecto foi movido ... github.com/firegento/firegento-logger
patas desalinhado
@PaulHachmang o primeiro link github.com/magento-hackathon/Logger está morto. Pode querer atualizá-lo.
SR_Magento 23/06
8

Isso não parecia tão facilmente acessível quanto eu pensava que deveria ser em algumas pesquisas que fiz, então estou postando uma pergunta / resposta para referência futura.

Exceções lançadas

Você pode ativar as notificações por email para exceções lançadas usando errors / local.xml. Você pode copiar errors/local.xml.templatepara `errors / local.xml 'e soltar o endereço de email e a linha de assunto que deseja 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>

Então, se alguma exceção for lançada e capturada pelo sistema de tratamento de erros do Magento, onde uma tela de relatório de erros é exibida para o usuário final, você receberá uma notificação por email.

Exceções registradas

Se você também deseja receber notificações por e-mail de exceções que não são lançadas, mas registradas, precisará ir um pouco mais longe.

Primeiro, substitua a classe principal do gravador de log .

Depois de fazer isso, basta soltar o código para enviar um e-mail para você mesmo depois que a exceção for registrada. Lembre-se de que você precisa salvar o nome do arquivo de log de dentro do __construct()para ter acesso a ele pelo _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
fonte
Tenha cuidado com isso. Se algo der errado no site, você terminará com uma enxurrada de emails. Isso por si só arrastaria o próprio servidor para baixo. Você acaba não apenas com um site corrompido, mas com um servidor inacessível! Você acaba tendo que limpar também muitos e-mails da lista de e-mails. Isso aconteceu comigo no passado
ProxiBlue
Este é um bom ponto. Não estamos gerenciando o servidor de email (Mandrill), mas ainda assim as coisas podem ficar entupidas rapidamente se de repente as exceções começarem a inundar por algum motivo.
kalenjordan
Eu sempre pensei que um email que seria um ótimo módulo. (alguém que recebe um hospedado no github / conhece um?) - basicamente qualquer e-mail enviado pelo magento para ser colocado em uma fila de e-mails, com um cron que roda a cada x minutos e envia o próximo e-mail na fila. A fila pode ter um contador e, se uma mensagem idêntica for colocada, ela poderá subir no balcão. Portanto, se você tiver 100 mensagens de exceção, da mesma exceção, você receberá apenas 1 e-mail com 'xxx ocorrências deste e-mail'. Também daria um ótimo ponto para verificar se os emails foram enviados do magento. - Eu simplesmente não tenho tempo para escrever este :(
ProxiBlue 20/13
7

Enviar todas as exceções por e-mail provavelmente resultará em MUITO correio.

Pode ser uma opção melhor registrar apenas as exceções no log e no correio de exceções que uma vez por dia para você mesmo usando um cronjob no linux

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

E, opcionalmente, limpá-lo depois de enviá-lo

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

Ou você pode executá-lo a cada hora, se precisar de uma frequência mais alta.

Dessa forma, não há necessidade de sobrescrever nenhum arquivo e manter a carga no servidor que constantemente envia e-mails para si mesmo.

Sander Mangel
fonte
Obrigado Sander. Eu argumentaria que as exceções registradas são um problema que precisa ser resolvido; portanto, você deve ter uma baixa ocorrência de exceções sendo registradas. Eu gosto da simplicidade de um trabalho cron para canalizar o log de exceção, mas não tenho certeza se gosto da idéia de limpar o log toda vez que for enviado por email.
kalenjordan
+1; porque eu pessoalmente acho que essa é a melhor opção para fazer isso. Obrigado por compartilhar seus pensamentos :-)
Rajeev K Tomy
2

talvez você também possa estar interessado na minha integração Magento / Monolog

https://github.com/aleron75/magemonolog

Atenciosamente Alessandro

Alessandro Ronchi
fonte
Bom trabalho, só quero saber se foi testado no magento versão 1.7? Ele não envia e-mail para mim no magneto versão 1.7.0.2
Haris
1
Desculpe @Haris eu não sei, mas email não enviada provavelmente depende da configuração do servidor de e-mail em vez da extensão
Alessandro Ronchi
1

Não gosto da implementação do writerModel personalizado do Mage :: log ou não o entendo. Para mim, não tira proveito do design do Zend_Log para ativar n gravadores. Eu teria tomado um registro, não um escritor. Portanto, eu fiz uma solução alternativa para aproveitar ao máximo o Zend_Log e ainda escrever muito pouco código, pois agreguei um 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 propósito, no Magento 1.7, recebo apenas alguns e-mails. Cada email tem algumas exceções / erros para uma solicitação, eu acho. Um site tão frequentado ainda resultará em muitos emails. Vou dar uma olhada nisso. Até agora está tudo bem para mim.

Andreas Dyballa
fonte
Obrigado Andreas. Também não entendo 100% o papel do modelo escritor versus o modelo de log, mas parecia o local mais natural para estender o Magento nesse caso.
precisa saber é o seguinte
Observe que XX_XXX_Model_Log é um modelo de escritor! Basta configurar o config.xml e adicionar um gravador de e-mail no método enhancement para enviar alguns e-mails também. Talvez tenhamos entendido mal.
Andreas Dyballa
Desculpe, eu quis dizer modelo de escritor versus modelo de fluxo de escritor. De qualquer forma, a solução que forneci acima funciona bem e parece ser tão legível quanto esta e também possui menos SLOC.
precisa saber é o seguinte
Com esta solução, você pode usar o Zend Framework para registro de Zend e configurar quantos gravadores desejar com filtros e prioridade. Portanto, é muito fácil criar um gravador de registro de arquivos configurável (prioritário), que você pode enviar com um cronograma do Mage a cada hora, via correio.
Andreas Dyballa 29/08