代码之家  ›  专栏  ›  技术社区  ›  Techie

如何为多个错误触发一封邮件

  •  0
  • Techie  · 技术社区  · 13 年前

    我有一个MYSQL表,如下所示,如果在程序执行过程中发生任何错误,它会记录数据库错误。这部分工作正常。

    enter image description here

    现在,我计划通过在发生数据库错误时触发邮件来扩展功能。所以我可以尽快参加。

    我遇到的问题是,如果出现一个错误,我会收到一封邮件。如果出现100个错误,我会收到100封无用的邮件。我想做的是收到一封邮件,不管一个小时内发生了多少错误。现在,当我向表中插入数据时,我只使用PHP邮件函数来发送邮件。

    考虑到我不能写一个每小时发送一次邮件的cron作业,因为我想在错误发生时立即收到邮件。

    我该怎么做?

    2 回复  |  直到 13 年前
        1
  •  0
  •   MadDokMike    13 年前

    或者,您可以在DB表中有一个标志,用于存储该错误是否已通过电子邮件报告以及错误发生的日期时间。决定你想要获得电子邮件报告的时间,例如每小时一次。然后,当你发现错误并将其插入数据库时,检查是否有任何未解决的错误需要报告,以及它们的时间戳是否超过了你决定的时间,如果是,则将它们全部分组并通过电子邮件发送报告。

        2
  •  0
  •   BenMorel Manish Pradhan    12 年前

    我所做的是

    DB错误的发生意味着它可能是一个简单的错误,也可能是致命的错误,比如MySQL服务器已经消失。在这一点上,试图访问数据库是没有用的。

    • 动态创建一个错误日志文件。
    • 如果文件大小为0字节/不存在,我会触发一封电子邮件,然后将错误记录到新创建的文件中。
    • 如果出现更多错误,我会将其全部记录下来。
    • 处理完错误后,我清除/删除了该文件。
    • 下次出现错误时,我会再次收到邮件。

    我知道它有唯一一项手动删除文件的工作。但是使用这种方法可以解决很多问题。

         /**
         * THIS FUNCTION LOGS THE ERRORS TO THE FILE
         * @param  string  $error_details Details of The Error
         * @return bool            
         */
        function saveErrorToFile($error_details){
    
            $file_path = JPATH_COMPONENT_ADMINISTRATOR.DS.'helpers'.DS.'error_log.txt';
            if(!JFile::exists($file_path ))
            {
                //create the file and write the error
                JFile::write($file_path,$error_details);
    
                //send the mail with the error
                $mail =& JFactory::getMailer();
                $mail->setSender(array('support@abc.com', 'support'));
                $mail->setSubject('DATABASE ERROR');
                $mail->setBody($error_details);
                $mail->IsHTML(true);
                $mail->addRecipient('dasun@abc.com');
                $mail->Send();
    
            }
            else
            {
                //read the existing content of the file and append with the new error
                $file_content = JFile::read($file_path);
                $file_content = $file_content."\n\n".$error_details;
                JFile::write($file_path,$file_content);
            }
    
            return true;  
        } 
    
    推荐文章