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


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.