मैं अपवादों के लिए ईमेल सूचनाएं कैसे प्राप्त कर सकता हूं?


14

मैं उन अपवादों के लिए ईमेल सूचनाएं कैसे सेट करूं जो साइट पर लॉग इन या फेंकी गई हैं?

अद्यतन: कुछ लोगों ने इस तथ्य पर टिप्पणी की है कि यदि आप हर अपवाद को ईमेल करते हैं, तो आपको बहुत अधिक ईमेल प्राप्त होने की उम्मीद हो सकती है। मैं अपने अपवाद लॉग को काफी हल्का रखना पसंद करता हूं। जो कुछ भी मैं वहाँ देखता हूँ, वह एक अपवाद है। यदि यह अपेक्षित कार्यक्षमता है और समस्या नहीं है, तो मैं अपवाद को पकड़ना पसंद करता हूं, यदि आवश्यक हो, तो संभवतः इसे किसी अन्य फ़ाइल (शायद system.log) पर लॉग इन करें, लेकिन अपवाद पर लॉग न करें।

लेकिन अगर आपके अपवाद में बहुत शोर है। जिसे आप साफ नहीं करना चाहते हैं, तो आप संभवतः ऐसा नहीं करना चाहेंगे।


जवाबों:


4

आप इस नौकरी के लिए Magento Hackthon Logger का उपयोग कर सकते हैं: https://github.com/firegento/firegento-logger/

यह सवाल नहीं है, लेकिन एक्सटेंशन के लिए एक्सटेंशन हैं: https://github.com/magento-hackathon/LoggerSentry/

मैं क्या कहना चाहता हूं: अपने स्वयं के "लेखक" को लागू करना आसान है :-)


अच्छा! धन्यवाद पॉल। क्या यह आपको केवल अपवाद लॉग ईमेल करने की अनुमति देगा ? यह प्राथमिक उपयोग का मामला था जिसमें मुझे दिलचस्पी थी और मुझे लगता है कि कुछ ऐसा है जो आम तौर पर कई मैगेंटो इंस्टाल पर लागू हो सकता है।
कालेंजर्डन

आप विभिन्न त्रिशूल सेट कर सकते हैं कि लॉग के साथ क्या करना है, एक्सएमपीपी (जीमेल चैट) पर अपवाद भेजें, उदाहरण के लिए डेटाबेस में मेल और लॉग को त्रुटियां भेजें।
पॉल हचमंग

सिर्फ FYI करें, इस प्रोजेक्ट को स्थानांतरित कर दिया गया है ... github.com/firegento/firegento-logger
Scruffy Paws

@PaulHachmang पहला लिंक github.com/magento-hackathon/Logger मृत है। इसे अपडेट करना चाहते हैं।
SR_Magento

8

यह आसानी से सुलभ नहीं लगता था क्योंकि मुझे लगा कि यह मेरे द्वारा किए गए कुछ खोज से होना चाहिए, इसलिए मैं भविष्य के संदर्भ के लिए एक प्रश्न / उत्तर पोस्ट कर रहा हूं।

अपवाद फेंको

आप त्रुटियों / local.xml का उपयोग करके फेंके गए अपवादों के लिए ईमेल सूचनाएं सक्षम कर सकते हैं। आप अपने errors/local.xml.template'एरर / लोकल / एक्सएमएल' को कॉपी कर सकते हैं और ईमेल एड्रेस और सब्जेक्ट लाइन को ड्रॉप कर सकते हैं जिसे आप उपयोग करना चाहते हैं।

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

फिर, यदि कोई अपवाद मैग्नेटो की त्रुटि हैंडलिंग प्रणाली द्वारा फेंका और पकड़ा जाता है, जहां एक त्रुटि रिपोर्ट स्क्रीन अंतिम उपयोगकर्ता को दिखाई देती है, तो आपको एक ईमेल सूचना मिलेगी।

अपवाद लॉग करें

यदि आप अपवादों के लिए ईमेल सूचनाएं प्राप्त करना चाहते हैं, जिन्हें फेंका नहीं गया है, बल्कि लॉग इन किया गया है, तो आपको हुड के नीचे थोड़ा और आगे बढ़ना होगा।

सबसे पहले, कोर लॉग लेखक वर्ग को ओवरराइड करें

एक बार जब आप ऐसा कर लेते हैं, तो अपवाद लॉग होने के बाद अपने आप को ईमेल शूट करने के लिए कोड में छोड़ दें। याद रखें कि विधि __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

ये एक अच्छा बिंदु है। हम स्वयं मेल सर्वर (मैनड्रिल) का प्रबंधन नहीं कर रहे हैं, लेकिन फिर भी अगर किसी कारण से अचानक अपवाद शुरू हो गए, तो चीजें जल्दी से बढ़ सकती हैं।
कलांजोरदान

मैंने हमेशा सोचा था कि एक मेल कतार एक महान मॉड्यूल होगा। (गीथुब पर होस्ट किए गए एक के लिए कोई भी लेने वाला / एक का पता?) - मूल रूप से किसी भी ईमेल मैगनेटो को मेल क्यू में भेज दिया जाता है, एक क्रोन के साथ जो हर एक्स मिनट चलता है और अगले ईमेल को कतार में भेजता है। कतार में एक काउंटर हो सकता है और यदि एक समान संदेश रखा जाता है, तो यह काउंटर को पूरा कर सकता है। इस प्रकार यदि आपके पास 100 अपवाद संदेश हैं, तो एक ही अपवाद से, आपको केवल 1 ईमेल मिलेगा, जिसमें 'इस ईमेल के xxx उदाहरण' हैं। यह जांचने के लिए भी एक शानदार बिंदु देगा कि क्या ईमेल को मैजेंटो से भेजा गया था। - मेरे पास यह लिखने का समय नहीं है :(
ProxiBlue

7

हर अपवाद को ईमेल करने से शायद बहुत सारे मेल आएंगे।

केवल अपवाद लॉग और मेल को अपवादों को लॉग करने के लिए यह एक बेहतर विकल्प हो सकता है कि दिन में एक बार अपने आप को लिनक्स में क्रोनजोब का उपयोग करके

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

या यदि आप एक उच्च आवृत्ति की जरूरत है तो आप इसे हर घंटे निष्पादित कर सकते हैं।

इस तरह किसी भी फाइल को अधिलेखित करने और सर्वर पर लोड रखने की आवश्यकता नहीं है जो लगातार अपने आप को मेल भेज रहे हैं।


धन्यवाद Sander हालांकि मैं तर्क दूंगा कि लॉगिंग करने वाले अपवाद एक समस्या है जिसे हल करने की आवश्यकता है, इसलिए आपके पास लॉग होने वाले अपवादों की कम घटना होनी चाहिए। मुझे अपवाद लॉग को पाइप करने के लिए क्रोन जॉब की सादगी पसंद है, लेकिन मुझे यकीन नहीं है कि मुझे हर बार ईमेल को लॉग आउट करने का विचार पसंद है।
कालेंजर्डन

+1; क्योंकि मुझे व्यक्तिगत रूप से ऐसा करने का सबसे अच्छा विकल्प लगता है। अपने विचार साझा करने के लिए धन्यवाद :-)
राजीव के टॉमी

2

शायद तुम भी मेरी Magento / एकात्म एकीकरण में रुचि हो सकती है

https://github.com/aleron75/magemonolog

सादर एलेसेंड्रो


अच्छा काम किया है, बस यह जानना चाहते हैं कि क्या यह मैगेंटो संस्करण 1.7 पर परीक्षण किया गया है? यह मेरे लिए मैग्नेटो संस्करण 1.7.0.2
हारिस

1
क्षमा करें @ हारीस मैं नहीं जानता, लेकिन असंतुलित ई-मेल की संभावना आपके ईमेल सर्वर कॉन्फ़िगरेशन के बजाय विस्तार पर निर्भर करती है
एलेसेंड्रो रोंची

1

मुझे माज का कार्यान्वयन पसंद नहीं है :: लॉग के कस्टम लेखकमॉडल या मैं इसे नहीं समझता। मेरे लिए यह 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);
}
}

मैगेंटो 1.7 में मुझे कुछ ईमेल मिले। प्रत्येक ईमेल में एक अनुरोध के लिए कुछ अपवाद / त्रुटियां हैं, मुझे लगता है। इतनी बारंबार साइट पर अभी भी कई ईमेल आएंगे। उस पर मेरी नजर रहेगी। अब तक मेरे लिए ठीक है।


धन्यवाद एंड्रियास। मैं 100% लेखक मॉडल बनाम लॉग मॉडल की भूमिका को खुद नहीं समझता, लेकिन यह इस उदाहरण में Magento का विस्तार करने के लिए सबसे स्वाभाविक जगह थी।
कलीनजॉर्डन

कृपया ध्यान दें XX_XXX_Model_Log एक लेखक_मॉडल है! बस अपने config.xml को कॉन्फ़िगर करें और कुछ मेल भेजने के लिए विधि बढ़ाने के लिए एक ईमेल-लेखक जोड़ें। शायद हमने गलत समझा।
एंड्रियास डियालाबा

क्षमा करें, मेरा मतलब था कि लेखक मॉडल बनाम लेखक स्ट्रीम मॉडल। किसी भी दर पर, मैंने ऊपर दिया गया समाधान ठीक काम करता है, और यह उतना ही पठनीय प्रतीत होता है और इसमें एसएलओसी भी कम होता है।
kalenjordan

इस समाधान के साथ आप Zend-logging के लिए Zend फ्रेमवर्क का उपयोग कर सकते हैं और उन कई लेखकों को कॉन्फ़िगर कर सकते हैं जिन्हें आप फ़िल्टर और प्राथमिकता के साथ चाहते हैं। तो यह एक विन्यास योग्य (प्राथमिकता) आगे fe फ़ाइल लॉगिंग लेखक बनाने के लिए बहुत आसान है जिसे आप मेल के माध्यम से हर घंटे एक मेनेज क्रोनजोब के साथ भेज सकते हैं।
एंड्रियास डियाबॉल

0

आप ईमेल सूचनाएँ बनाने या उन ग्राहकों की दैनिक रिपोर्ट प्राप्त करने के लिए एक मॉड्यूल का उपयोग कर सकते हैं जिन्हें अपवाद मिला:

यहाँ कार्यान्वयन समझाया गया है: https://grafzahl-io.blogspot.de/2017/03/notifications-for-every-exception-in-magento.html

यह त्रुटियों और अन्य घटनाओं की निगरानी करने के लिए मॉड्यूल है (यहां तक ​​कि अपवाद मिलने पर ग्राहक को छूट लागू करें ): https://grafzahl.io/notify-module

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.