发生错误时如何使用来自Monolog的PHPMailer发送邮件

时间:2018-03-20 18:52:28

标签: php phpmailer monolog

我在我的项目中使用Monolog(https://github.com/Seldaek/monolog),我们希望在应用程序出错时收到电子邮件。日志按预期工作但如果日志级别为ERROR(低于日志级别为DEBUG),我希望记录器向我发送电子邮件。

我尝试使用类NativeMailHandler,但它似乎不起作用,我更喜欢使用我们的SMTP邮件服务器(在PHP中运行良好,但我无法弄清楚如何将它与Monolog链接错误处理程序)

$logger = new Logger('LOG');
$logHandler = new StreamHandler('synchro.log',Logger::DEBUG);
$logger->pushHandler($logHandler);

2 个答案:

答案 0 :(得分:1)

我为Monolog创建了PHPMailer处理程序。它使您可以使用PHPMailer将日志发送到电子邮件。

它在this alsoGitHub上可用,但也可以在没有Composer的情况下使用(这需要手动安装Monolog和PHPMailer)。

<?php

use MonologPHPMailer\PHPMailerHandler;

use Monolog\Formatter\HtmlFormatter;
use Monolog\Logger;
use Monolog\Processor\IntrospectionProcessor;
use Monolog\Processor\MemoryUsageProcessor;
use Monolog\Processor\WebProcessor;

use PHPMailer\PHPMailer\PHPMailer;

require __DIR__ . '/vendor/autoload.php';

$mailer = new PHPMailer(true);
$logger = new Logger('logger');

$mailer->isSMTP();
$mailer->Host = 'smtp.example.com';
$mailer->SMTPAuth = true;
$mailer->Username = 'server@example.com';
$mailer->Password = 'password';

$mailer->setFrom('server@example.com', 'Logging Server');
$mailer->addAddress('user@example.com', 'Your Name');

$logger->pushProcessor(new IntrospectionProcessor);
$logger->pushProcessor(new MemoryUsageProcessor);
$logger->pushProcessor(new WebProcessor);

$handler = new PHPMailerHandler($mailer);
$handler->setFormatter(new HtmlFormatter);

$logger->pushHandler($handler);

$logger->error('Error!');
$logger->alert('Something went wrong!');

答案 1 :(得分:0)

好吧,我找到了解决问题的方法,也许有一天会帮助别人:

由于类NativeMailHandler正在使用mail()php函数。我更改了函数send()的monolog / monolog / src / Monolog / Handler / NativeMailhandler.php中的代码,并且我在那里声明了我的PHPMailer()而不是mail()函数。

    $mailHandler = new NativeMailerHandler(your_email@email.com, $subject, $from,Logger::ERROR,true, 70);

    $logHandler = new StreamHandler('synchro.log',Logger::DEBUG);

    $logger->pushHandler($logHandler);
    $logger->pushHandler($mailHandler); //push the mail Handler. on the log level defined (Logger::ERROR in this example), it will send an email to the configured mail in the send() function in monolog/monolog/src/Monolog/Handler/NativeMailhandler.php