İstisnalar için e-posta bildirimlerini nasıl alabilirim?


14

Siteye kaydedilen veya atılan istisnalar için e-posta bildirimlerini nasıl ayarlarım?

GÜNCELLEME: Birkaç istisna varsa, e-postanızda her istisna varsa çok fazla e-posta almayı bekleyebileceğiniz gerçeği hakkında yorum yaptı. İstisna günlüğümü oldukça hafif tutma eğilimindeyim. Oraya giren her şeyi bir istisna olarak görüyorum. Beklenen işlevsellik ve bir sorun değil, o zaman ben istisnayı yakalamak, gerekirse başka bir dosyaya (belki system.log) günlüğe kaydetmek istiyorum, ancak exception.log günlüğe kaydetmiyorum.

Ancak, istisnada.log'da temizlemek istemediğiniz çok fazla gürültü varsa, muhtemelen bunu yapmak istemeyeceksiniz.


6
SİZ OLACAK KAZA GMAIL'DE
benmarks

Yanıtlar:


4

Magento Hackthon Logger'ı bu iş için kullanabilirsiniz: https://github.com/firegento/firegento-logger/

Bu soru değil, ancak uzantı için uzantılar var: https://github.com/magento-hackathon/LoggerSentry/

Ne demek istiyorum: Kendi "Yazar" uygulamak kolaydır :-)


Güzel! Teşekkürler Paul. Bu, kendinize yalnızca istisna günlükleri e-posta ile göndermenize izin verir mi ? İlgilendiğim birincil kullanım durumuydu ve bence çoğu Magento kurulumunda genellikle geçerli olabilecek bir şey.
Haziran'da

Günlüklerle ne yapılacağı konusunda çeşitli çay bardakları kurabilir, XMPP'ye (gmail sohbet) Özel Durumlar gönderebilir, postalara hata gönderebilir ve bildirimleri veritabanına kaydedebilirsiniz.
Paul Hachmang

Sadece FYI, bu proje taşındı ... github.com/firegento/firegento-logger
Scruffy Paws

@PaulHachmang ilk bağlantı github.com/magento-hackathon/Logger öldü. Güncellemek isteyebilir.
SR_Magento

8

Bu, yaptığım bazı aramalardan olması gerektiğini düşündüğüm kadar kolay erişilebilir değildi, bu yüzden gelecekteki referans için bir soru sorusu / yanıtı gönderiyorum.

Atılan İstisnalar

Hatalar / local.xml kullanılarak atılan istisnalar için e-posta bildirimlerini etkinleştirebilirsiniz. errors/local.xml.template`` Error / local.xml '' dosyasına kopyalayabilir ve kullanmak istediğiniz e-posta adresini ve konu satırını bırakabilirsiniz.

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

Ardından, son kullanıcıya bir hata raporu ekranının görüntülendiği Magento'nun hata işleme sistemi tarafından herhangi bir istisna atılır ve yakalanırsa, bir e-posta bildirimi alırsınız.

Kayıtlı İstisnalar

Atılmayan ancak günlüğe kaydedilen istisnalar için e-posta bildirimleri almak isterseniz, başlık altında biraz daha ilerlemeniz gerekir.

İlk olarak, çekirdek günlük yazar sınıfını geçersiz kılın .

Bunu yaptıktan sonra, istisna günlüğe kaydedildikten sonra kendinize bir e-posta çekmek için kodu bırakın. Yöntemden __construct()erişebilmek için günlük dosya adını içinden kaydetmeniz gerektiğini unutmayın _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    
    }
}

Buna dikkat et. Sitede bir şeyler ters giderse, bir e-posta seli ile sonuçlanacaksınız. Bu kendi başına sunucunun kendisini aşağı sürükleyecektir. Daha sonra sadece bozuk bir site değil, erişilemeyen bir sunucu ile sonuçlanırsınız! Daha sonra, posta kuyruğundan çok sayıda e-postayı da temizlemek zorunda kalırsınız. Bu bana geçmişte oldu
ProxiBlue

İyi bir noktaya değindin. Posta sunucusunu kendimiz yönetmiyoruz (Mandrill), ancak ani istisnaların tümü bir sebepten ötürü su basmaya başlarsa yine de işler hızla tıkanabilir.
kalenjordan

Ben her zaman bir posta que harika bir modül olacağını düşündüm. (github'da barındırılan bir kişi için herhangi bir kişi var mı? Que'nin bir sayacı olabilir ve özdeş bir mesaj yerleştirilirse, sadece sayacı yükseltebilir. Dolayısıyla, aynı istisnadan 100 istisna mesajınız varsa, 'bu e-postanın xxx örnekleri' ile yalnızca 1 e-posta alırsınız. Ayrıca, magento'dan e-posta gönderilip gönderilmediğini kontrol etmek için harika bir nokta olacaktır. - Bunu yazmak için zamanım yok :(
ProxiBlue

7

Her istisnanın e-posta ile gönderilmesi büyük olasılıkla bir sürü postayla sonuçlanacaktır.

Linux'ta bir cronjob kullanarak günde bir kez istisna günlüğüne ve postalara istisnaları kaydetmek daha iyi bir seçenek olabilir

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

Ve isteğe bağlı olarak postaladıktan sonra temizlemek

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

Veya daha yüksek bir frekansa ihtiyacınız varsa her saat çalıştırabilirsiniz.

Bu şekilde, herhangi bir dosyanın üzerine yazmaya ve sunucuya sürekli olarak e-posta gönderen yükü korumaya gerek kalmaz.


Teşekkürler Sander. Günlüğe kaydetme istisnalarının çözülmesi gereken bir sorun olduğunu iddia ediyorum, bu yüzden günlüğe kaydedilen istisnaların düşük bir oluşumuna sahip olmalısınız. İstisna günlüğünü yönlendirmek için bir cron işinin basitliğini seviyorum, ancak her e-postayla gönderildiğinde günlüğü temizleme fikrini sevmediğimden emin değilim.
Haziran'da kalenjordan

+ 1; çünkü şahsen bunun bunu yapmak için en iyi seçenek olduğunu hissediyorum. Düşüncelerinizi paylaştığınız için teşekkürler :-)
Rajeev K Tomy

2

belki de ilginizi çekebilir Magento / Monolog entegrasyonu

https://github.com/aleron75/magemonolog

Saygılarımızla Alessandro


Güzel iş bitti, sadece magento 1.7 sürümünde test edilip edilmediğini bilmek ister misiniz? Magneto 1.7.0.2 sürümünde benim için e-posta göndermiyor
Haris

1
Üzgünüm @Haris Bilmiyorum ama gönderilmemiş e-posta büyük olasılıkla uzantı yerine e-posta sunucusu yapılandırmanıza bağlıdır
Alessandro Ronchi

1

Mage :: log'un özel yazarıModel'in uygulanmasını sevmiyorum ya da anlamıyorum. Benim için Zend_Log tasarımından yararlanarak n yazarını kullanmıyor. Bir Yazar değil bir Kütük alırdım. Bu nedenle Zend_Log'un tüm avantajlarından yararlanmak ve hala çok fazla kod yazmak için bir geçici çözüm yaptım, çünkü bir Zend_log topladım.

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

Bu arada Magento 1.7'de sadece birkaç e-posta alıyorum. Her e-postada bir istek için bazı istisnalar / hatalar var sanırım. Çok sık ziyaret edilen site yine de birçok e-posta ile sonuçlanacaktır. Ben buna bakacağım. Artık benim için sorun değil.


Teşekkürler Andreas. Ben de% 100 yazar modelinin log modeline karşı rolünü kendim anlamıyorum, ama bu durumda Magento'yu genişletmek için en doğal yer gibi görünüyordu.
kalenjordan

Lütfen XX_XXX_Model_Log'un bir yazar_model olduğunu unutmayın! Sadece config.xml dosyasını yapılandırın ve bazı e-postalar göndermek için yöntem geliştirmeye bir e-posta ekleyin. Belki de yanlış anladık.
Andreas Dyballa

Üzgünüm, yazar modeli vs yazar akışı modeli demek istedim. Her halükarda, yukarıda verdiğim çözüm iyi çalışıyor ve bu kadar okunabilir görünüyor ve ayrıca daha az SLOC var.
kalenjordan

Bu çözümle Zend günlüğü için Zend Framework'ü kullanabilir ve filtreler ve önceliklerle istediğiniz sayıda yazar yapılandırabilirsiniz. Bu nedenle, her saatte bir Mage cronjob ile posta yoluyla gönderebileceğiniz, yapılandırılabilir (öncelikli) daha fazla fe Dosya günlüğü yazarı yapmak çok kolaydır.
Andreas Dyballa

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.