CakePHP:如果至少发生1个错误,则通过电子邮件发送日志输出
我有一个基于CakePHP3.6的控制台应用程序。一旦日志记录包含至少一个错误或警告,它就会自动发送电子邮件。有专门为此制作的记录器吗?由于我没有找到任何记录器,我创建了一个自定义记录器,将日志条目保存在类变量中:CakePHP:如果至少发生1个错误,则通过电子邮件发送日志输出,cakephp,Cakephp,我有一个基于CakePHP3.6的控制台应用程序。一旦日志记录包含至少一个错误或警告,它就会自动发送电子邮件。有专门为此制作的记录器吗?由于我没有找到任何记录器,我创建了一个自定义记录器,将日志条目保存在类变量中: <?php namespace App\Log\Engine; use Psr\Log\LogLevel; use Cake\Log\Engine\BaseLog; class BufferLog extends BaseLog { protected static
<?php
namespace App\Log\Engine;
use Psr\Log\LogLevel;
use Cake\Log\Engine\BaseLog;
class BufferLog extends BaseLog
{
protected static $buffer = '';
protected static $needsSending = false;
public static function getBuffer() {
if (self::$needsSending)
return self::$buffer;
return '';
}
public static function reset() {
self::$buffer = false;
self::$needsSending = false;
}
public function log($level, $message, array $context = [])
{
$alert = [
LogLevel::EMERGENCY,
LogLevel::CRITICAL,
LogLevel::ALERT,
LogLevel::ERROR,
LogLevel::WARNING,
];
if (in_array($level, $alert)) {
self::$needsSending = true;
}
$message = $this->_format($message);
unset($context['scope']);
if ($context) {
$message .= "\n" . $this->_format($context) . "\n";
}
self::$buffer .= date('c') . ' [' . $level . '] ' . $message . "\n";
}
}
(请注意,这只适用于日志文件中的错误,而不适用于PHP错误。)如果要记录PHP错误,有一个插件:
$logOutput = BufferLog::getBuffer();
if ($logOutput) {
Email::deliver('you@example.com', 'Log', $logOutput, ['from' => 'me@example.com']);
}