예외 이메일 알림을 받으려면 어떻게해야합니까?


14

사이트에 기록되거나 발생 된 예외에 대해 이메일 알림을 설정하려면 어떻게합니까?

업데이트 : 모든 예외를 이메일로 보내면 너무 많은 이메일을받을 것으로 예상된다는 사실에 대해 몇몇 사람들이 언급했습니다. 나는 예외 로그를 ​​꽤 밝게 유지하는 경향이 있습니다. 거기에 들어가는 것은 예외라고 생각합니다. 예상대로 작동하지만 문제가 아닌 경우 예외를 포착하고 필요할 경우 다른 파일 (아마 system.log)에 기록 할 수 있지만 exception.log에는 기록하지 않을 수 있습니다.

그러나 exception.log에 정리하고 싶지 않은 소음이 많으면이 작업을 원하지 않을 것입니다.


6
당신은 Gmail을
충돌합니다

답변:


4

이 작업에 Magento Hackthon Logger를 사용할 수 있습니다 : https://github.com/firegento/firegento-logger/

의문의 여지가 없지만 확장을위한 확장이 있습니다 : https://github.com/magento-hackathon/LoggerSentry/

내가 말하고 싶은 것 : 자신의 "Writer"를 쉽게 구현할 수 있습니다 :-)


좋은! 고마워 폴 예외 로그 이메일로 보낼 수 있습니까? 이것이 제가 관심을 갖는 주요 사용 사례였으며 많은 Magento 설치에 일반적으로 적용 할 수있는 것으로 생각합니다.
kalenjordan

예를 들어 로그로 수행 할 작업, XMPP (gmail 채팅)에 예외 전송, 메일에 오류 전송 및 통지를 데이터베이스에 기록하는 등 다양한 조치를 설정할 수 있습니다.
Paul Hachmang 2016 년

참고로,이 프로젝트는 이전되었습니다 ... github.com/firegento/firegento-logger
Scruffy Paws

@PaulHachmang 첫 번째 링크 github.com/magento-hackathon/Logger 가 종료되었습니다. 업데이트하고 싶을 수도 있습니다.
SR_Magento 2016 년

8

이것은 내가 한 검색에서해야한다고 생각한 것처럼 쉽게 액세스 할 수 없었으므로 나중에 참조 할 수 있도록 질문 질문 / 답변을 게시하고 있습니다.

예외 발생

errors / local.xml을 사용하여 발생하는 예외에 대해 이메일 알림을 사용할 수 있습니다. errors/local.xml.template`errors / local.xml '에 복사하여 사용하려는 이메일 주소와 제목을 입력하십시오.

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

그런 다음 최종 사용자에게 오류 보고서 화면이 표시되는 Magento의 오류 처리 시스템에서 예외가 발생하고 발견되면 전자 메일 알림을 받게됩니다.

기록 된 예외

발생하지 않고 기록되는 예외에 대한 전자 메일 알림을 받으려면 약간 더 나아가 야합니다.

먼저 코어 로그 작성기 클래스를 대체하십시오 .

그런 다음 코드를 삭제하면 예외가 기록 된 후 이메일을 확인할 수 있습니다. 메소드 __construct()에서 파일 이름에 액세스하려면 로그 파일 이름을 저장해야합니다 _write().

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

이것을 조심하십시오. 사이트에서 문제가 발생하면 많은 양의 이메일이 발송됩니다. 이것은 그 자체로 서버 자체를 끌어 내릴 것입니다. 그런 다음 깨진 사이트뿐만 아니라 액세스 할 수없는 서버로 끝납니다! 그런 다음 메일 큐에서 많은 메일을 삭제해야합니다. 이것은 과거에 나에게 일어났다
ProxiBlue

그건 좋은 지적이야. 우리는 메일 서버를 직접 관리하지 않지만 (Mandrill) 갑작스러운 예외로 인해 어떤 이유로 든 홍수가 발생하면 상황이 빨리 막힐 수 있습니다.
kalenjordan

나는 항상 메일 큐가 훌륭한 모듈이라고 생각했다. (github에서 호스팅되는 사람의 수취인 / 알고있는 사람?)-기본적으로 magento가 보내는 모든 전자 메일은 x 분마다 실행되고 cque의 다음 전자 메일을 보내는 cron과 함께 메일 대기열에 보관됩니다. que는 카운터를 가질 수 있고 동일한 메시지가 배치되면 카운터 위로 올 수 있습니다. 따라서 동일한 예외에서 100 개의 예외 메시지가있는 경우 '이 전자 메일의 xxx 인스턴스'와 함께 1 개의 전자 메일 만 받게됩니다. 또한 magento에서 이메일을 보냈는지 확인할 수 있습니다. -이 글을 쓸 시간이 없습니다 :(
ProxiBlue

7

모든 예외를 이메일로 보내면 많은 메일이 발송 될 수 있습니다.

예외 로그에 예외를 기록하고 Linux에서 cronjob을 사용하여 하루에 한 번 자신에게 메일을 보내는 것이 더 나은 옵션 일 수 있습니다

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

우편으로 발송 한 후 선택적으로 정리

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

또는 더 높은 빈도가 필요한 경우 매시간 실행할 수 있습니다.

이런 식으로 파일을 덮어 쓰지 않고 지속적으로 메일을 자신에게 보내는 서버의로드를 유지할 필요가 없습니다.


고마워요 샌더. 로깅중인 예외는 해결해야 할 문제이므로, 예외가 적게 기록되도록해야합니다. 나는 예외 로그를 ​​파이프하는 cron 작업의 단순함을 좋아하지만 이메일을 보낼 때마다 로그를 지우는 아이디어가 마음에 들지 않습니다.
kalenjordan

+1; 개인적으로 이것이 최선의 선택이라고 생각하기 때문입니다. 의견을 보내 주셔서 감사합니다 :-)
Rajeev K Tomy

2

어쩌면 당신은 또한 내 Magento / Monolog 통합에 관심이있을 수 있습니다

https://github.com/aleron75/magemonolog

알레산드로 감사합니다


좋은 일을 마쳤습니다. magento 버전 1.7에서 테스트되었는지 알고 싶습니까? magneto 버전 1.7.0.2에서 나에게 이메일을 보내지 않습니다
Haris

1
죄송합니다 @Haris 모르겠지만 보내지 않은 이메일 가능성이 확장보다는 오히려 전자 메일 서버 구성에 따라 달라집니다
알레산드로 론치에게

1

Mage :: log의 커스텀 writerModel 구현이 마음에 들지 않거나 이해할 수 없습니다. 나를 위해 n 개의 작성자를 활성화하기 위해 Zend_Log 디자인을 사용하지 않습니다. 필자는 작가가 아닌 로그를 가져 갔을 것입니다. 따라서 Zend_Log를 최대한 활용하고 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);
}
}

그건 그렇고 Magento 1.7에서는 몇 개의 이메일을 받았습니다. 각 이메일에는 한 번의 요청에 대한 예외 / 오류가 있습니다. 자주 방문하는 사이트는 여전히 많은 이메일을 생성합니다. 나는 그것을 볼 것입니다. 지금까지는 괜찮습니다.


Andreas에게 감사합니다. 필자는 필자 모델과 로그 모델의 역할을 100 % 이해하지 못하지만이 경우 Magento를 확장하는 것이 가장 자연스러운 장소 인 것 같습니다.
kalenjordan

XX_XXX_Model_Log는 작가 모델입니다. config.xml을 구성하고 이메일 향상을 위해 이메일 작성기를 추가하십시오. 아마도 우리는 오해했을 것입니다.
Andreas Dyballa

나는 작가 모델 대 작가 스트림 모델을 의미했습니다. 어쨌든, 내가 위에서 준 솔루션은 잘 작동하며 이것처럼 읽을 수 있고 SLOC도 적습니다.
kalenjordan

이 솔루션을 사용하면 Zend 로깅을 위해 Zend Framework를 사용하고 필터 및 우선 순위를 사용하여 원하는 수의 작성자를 구성 할 수 있습니다. 따라서 매시간마다 Mage 크론 잡과 함께 메일을 통해 보낼 수있는 구성 가능한 (우선 순위) 파일 로깅 기록기를 만드는 것이 매우 쉽습니다.
Andreas Dyballa

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.