例外のメール通知を受け取るにはどうすればよいですか?


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/

私が言いたいこと:あなた自身の「ライター」を実装するのは簡単です:-)


いいね!ポールありがとう。例外ログのみを自分自身にメールで送信できますか?それが私が興味を持っていた主なユースケースであり、多くのMagentoのインストールに一般的に適用できるものだと思います。
-kalenjordan

たとえば、ログの処理、XMPPへの例外の送信(gmailチャット)、メールへのエラーの送信、データベースへの通知の記録など、さまざまな基準を設定できます。
ポールハックマン


@PaulHachmang最初のリンク github.com/magento-hackathon/Loggerは死んでいます。更新したい場合があります。
SR_Magento

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

それは良い点です。メールサーバー(マンドリル)を自分で管理しているわけではありませんが、何らかの理由で突然の例外のすべてがフラッディングし始めた場合でも、すぐに物が詰まる可能性があります。
kalenjordan

メールクエリはすばらしいモジュールだといつも思っていました。(githubでホストされているもののいずれか/または知っていますか?)-基本的にmagentoが送信するメールはメールキューにドロップされ、cronはx分ごとに実行され、キュー内の次のメールを送信します。queにはカウンターがあり、同じメッセージが配置されている場合は、カウンターを上げることができます。したがって、同じ例外から100の例外メッセージがある場合、「この電子メールのxxxインスタンス」を含む1つの電子メールのみを受け取ります。また、magentoから電子メールが送信されたかどうかを確認することも重要です。-私はこの1つを書く時間がない:(
ProxiBlue

7

すべての例外をメールで送信すると、おそらく大量のメールが送信されます。

Linuxでcronjobを使用して、1日に1回自分自身に例外ログとメールに例外を記録するだけの方が良いかもしれません

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

または、より高い頻度が必要な場合は、1時間ごとに実行できます。

この方法では、ファイルを上書きする必要がなく、常に自分宛にメールを送信するサーバーの負荷を抑えることができます。


サンダーありがとう。ただし、ログに記録されている例外は解決する必要がある問題であるため、ログに記録される例外の発生率は低いはずです。例外ログをパイプ処理するcronジョブの単純さが好きですが、メールが送信されるたびにログを消去するというアイデアが好きかどうかはわかりません。
-kalenjordan

+1; 私は個人的にはこれがこれを行うための最良の選択肢だと感じているからです。あなたの考えを共有してくれてありがとう:-)
ラジーエフKトミー14

2

たぶん、Magento / Monologの統合にも興味があるかもしれません

https://github.com/aleron75/magemonolog

よろしくアレッサンドロ


素晴らしい仕事が完了しました。Magentoバージョン1.7でテストされているかどうかを知りたいだけですか?マグネトーバージョン1.7.0.2-
ハリス

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では、いくつかのメールが届きます。各メールには、1つのリクエストに対していくつかの例外/エラーがあります。そのため、頻繁にアクセスするサイトでは、依然として多くのメールが送信されます。それについて見ていきます。今では大丈夫です。


アンドレアスに感謝します。私自身もライターモデルとログモデルの役割を100%理解していませんが、この場合Magentoを拡張する最も自然な場所のように思えました。
-kalenjordan

XX_XXX_Model_Logはwriter_modelであることに注意してください!config.xmlを構成し、いくつかのメールを送信するために、メソッドEnhanceにメールライターを追加するだけです。おそらく私たちは誤解した。
アンドレアスディバラ

申し訳ありませんが、ライターモデルとライターストリームモデルを意味します。とにかく、私が上で与えた解決策はうまく機能し、これと同じくらい読みやすく、またSLOCも少ないようです。
kalenjordan

このソリューションを使用すると、ZendロギングにZend Frameworkを使用し、フィルターと優先度を使用して必要な数のライターを構成できます。したがって、メールで1時間ごとにMage cronjobで送信できるファイルロギングライターを設定可能(優先)にすることは非常に簡単です。
アンドレアスディバラ

0

モジュールを使用して、電子メール通知を作成したり、例外が発生した顧客の毎日のレポートを取得したりすることもできます。

実装について説明します:https : //grafzahl-io.blogspot.de/2017/03/notifications-for-every-exception-in-magento.html

これは、エラーやその他のイベントを監視するモジュールです(例外が発生した場合、顧客に割引を適用することもできます):https : //grafzahl.io/notify-module

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.