forked from MichaelYick/mailpoet
Use doctrine to create logs
[MAILPOET-3624]
This commit is contained in:
parent
a3b420d65c
commit
e661d07acb
@ -219,7 +219,7 @@ class ContainerConfigurator implements IContainerConfigurator {
|
||||
$container->autowire(\MailPoet\Listing\PageLimit::class)->setPublic(true);
|
||||
// Logging
|
||||
$container->autowire(\MailPoet\Logging\LoggerFactory::class);
|
||||
$container->autowire(\MailPoet\Logging\LogRepository::class);
|
||||
$container->autowire(\MailPoet\Logging\LogRepository::class)->setPublic(true);
|
||||
// Notices
|
||||
$container->autowire(\MailPoet\Util\Notices\PermanentNotices::class);
|
||||
//Referrals
|
||||
|
@ -2,6 +2,7 @@
|
||||
|
||||
namespace MailPoet\Entities;
|
||||
|
||||
use DateTimeInterface;
|
||||
use MailPoet\Doctrine\EntityTraits\AutoincrementedIdTrait;
|
||||
use MailPoet\Doctrine\EntityTraits\CreatedAtTrait;
|
||||
use MailPoetVendor\Doctrine\ORM\Mapping as ORM;
|
||||
@ -52,4 +53,20 @@ class LogEntity {
|
||||
public function getMessage(): ?string {
|
||||
return $this->message;
|
||||
}
|
||||
|
||||
public function setName(?string $name): void {
|
||||
$this->name = $name;
|
||||
}
|
||||
|
||||
public function setLevel(?int $level): void {
|
||||
$this->level = $level;
|
||||
}
|
||||
|
||||
public function setMessage(?string $message): void {
|
||||
$this->message = $message;
|
||||
}
|
||||
|
||||
public function setCreatedAt(DateTimeInterface $createdAt): void {
|
||||
$this->createdAt = $createdAt;
|
||||
}
|
||||
}
|
||||
|
@ -2,6 +2,7 @@
|
||||
|
||||
namespace MailPoet\Logging;
|
||||
|
||||
use MailPoet\Entities\LogEntity;
|
||||
use MailPoet\Models\Log;
|
||||
use MailPoetVendor\Carbon\Carbon;
|
||||
use MailPoetVendor\Monolog\Handler\AbstractProcessingHandler;
|
||||
@ -22,30 +23,35 @@ class LogHandler extends AbstractProcessingHandler {
|
||||
/** @var callable|null */
|
||||
private $randFunction;
|
||||
|
||||
public function __construct($level = \MailPoetVendor\Monolog\Logger::DEBUG, $bubble = \true, $randFunction = null) {
|
||||
/** @var LogRepository */
|
||||
private $logRepository;
|
||||
|
||||
public function __construct(
|
||||
LogRepository $logRepository,
|
||||
$level = \MailPoetVendor\Monolog\Logger::DEBUG,
|
||||
$bubble = \true,
|
||||
$randFunction = null
|
||||
) {
|
||||
parent::__construct($level, $bubble);
|
||||
$this->randFunction = $randFunction;
|
||||
$this->logRepository = $logRepository;
|
||||
}
|
||||
|
||||
protected function write(array $record) {
|
||||
$model = $this->createNewLogModel();
|
||||
$model->hydrate([
|
||||
'name' => $record['channel'],
|
||||
'level' => $record['level'],
|
||||
'message' => $record['formatted'],
|
||||
'created_at' => $record['datetime']->format('Y-m-d H:i:s'),
|
||||
]);
|
||||
$model->save();
|
||||
$entity = new LogEntity();
|
||||
$entity->setName($record['channel']);
|
||||
$entity->setLevel($record['level']);
|
||||
$entity->setMessage($record['formatted']);
|
||||
$entity->setCreatedAt($record['datetime']);
|
||||
|
||||
$this->logRepository->persist($entity);
|
||||
$this->logRepository->flush();
|
||||
|
||||
if ($this->getRandom() <= self::LOG_PURGE_PROBABILITY) {
|
||||
$this->purgeOldLogs();
|
||||
}
|
||||
}
|
||||
|
||||
private function createNewLogModel() {
|
||||
return Log::create();
|
||||
}
|
||||
|
||||
private function getRandom() {
|
||||
if ($this->randFunction) {
|
||||
return call_user_func($this->randFunction, 0, 100);
|
||||
|
@ -2,6 +2,7 @@
|
||||
|
||||
namespace MailPoet\Logging;
|
||||
|
||||
use MailPoet\DI\ContainerWrapper;
|
||||
use MailPoet\Settings\SettingsController;
|
||||
use MailPoetVendor\Monolog\Processor\IntrospectionProcessor;
|
||||
use MailPoetVendor\Monolog\Processor\MemoryUsageProcessor;
|
||||
@ -37,8 +38,12 @@ class LoggerFactory {
|
||||
/** @var SettingsController */
|
||||
private $settings;
|
||||
|
||||
public function __construct(SettingsController $settings) {
|
||||
/** @var LogRepository */
|
||||
private $logRepository;
|
||||
|
||||
public function __construct(LogRepository $logRepository, SettingsController $settings) {
|
||||
$this->settings = $settings;
|
||||
$this->logRepository = $logRepository;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -60,14 +65,17 @@ class LoggerFactory {
|
||||
$this->loggerInstances[$name]->pushProcessor(new MemoryUsageProcessor());
|
||||
}
|
||||
|
||||
$this->loggerInstances[$name]->pushHandler(new LogHandler($this->getDefaultLogLevel()));
|
||||
$this->loggerInstances[$name]->pushHandler(new LogHandler($this->logRepository, $this->getDefaultLogLevel()));
|
||||
}
|
||||
return $this->loggerInstances[$name];
|
||||
}
|
||||
|
||||
public static function getInstance() {
|
||||
if (!self::$instance instanceof LoggerFactory) {
|
||||
self::$instance = new LoggerFactory(SettingsController::getInstance());
|
||||
self::$instance = new LoggerFactory(
|
||||
ContainerWrapper::getInstance()->get(LogRepository::class),
|
||||
SettingsController::getInstance()
|
||||
);
|
||||
}
|
||||
return self::$instance;
|
||||
}
|
||||
|
@ -2,13 +2,21 @@
|
||||
|
||||
namespace MailPoet\Logging;
|
||||
|
||||
use MailPoet\Entities\LogEntity;
|
||||
use MailPoet\Models\Log;
|
||||
use MailPoetVendor\Carbon\Carbon;
|
||||
use MailPoetVendor\Idiorm\ORM;
|
||||
|
||||
class LogHandlerTest extends \MailPoetTest {
|
||||
/** @var LogRepository */
|
||||
private $repository;
|
||||
|
||||
public function _before() {
|
||||
$this->truncateEntity(LogEntity::class);
|
||||
$this->repository = $this->diContainer->get(LogRepository::class);
|
||||
}
|
||||
|
||||
public function testItCreatesLog() {
|
||||
$logHandler = new LogHandler();
|
||||
$logHandler = new LogHandler($this->repository);
|
||||
$time = new \DateTime();
|
||||
$logHandler->handle([
|
||||
'level' => \MailPoetVendor\Monolog\Logger::EMERGENCY,
|
||||
@ -37,7 +45,7 @@ class LogHandlerTest extends \MailPoetTest {
|
||||
return 0;
|
||||
};
|
||||
|
||||
$logHandler = new LogHandler(\MailPoetVendor\Monolog\Logger::DEBUG, true, $random);
|
||||
$logHandler = new LogHandler($this->repository, \MailPoetVendor\Monolog\Logger::DEBUG, true, $random);
|
||||
$logHandler->handle([
|
||||
'level' => \MailPoetVendor\Monolog\Logger::EMERGENCY,
|
||||
'extra' => [],
|
||||
@ -52,8 +60,7 @@ class LogHandlerTest extends \MailPoetTest {
|
||||
|
||||
public function testItNotPurgesOldLogs() {
|
||||
$model = Log::create();
|
||||
$date = Carbon::create();
|
||||
assert($date instanceof Carbon);
|
||||
$date = Carbon::now();
|
||||
$model->hydrate([
|
||||
'name' => 'old name keep',
|
||||
'level' => '5',
|
||||
@ -65,7 +72,7 @@ class LogHandlerTest extends \MailPoetTest {
|
||||
return 100;
|
||||
};
|
||||
|
||||
$logHandler = new LogHandler(\MailPoetVendor\Monolog\Logger::DEBUG, true, $random);
|
||||
$logHandler = new LogHandler($this->repository, \MailPoetVendor\Monolog\Logger::DEBUG, true, $random);
|
||||
$logHandler->handle([
|
||||
'level' => \MailPoetVendor\Monolog\Logger::EMERGENCY,
|
||||
'extra' => [],
|
||||
@ -77,8 +84,4 @@ class LogHandlerTest extends \MailPoetTest {
|
||||
$log = Log::whereEqual('name', 'old name keep')->findMany();
|
||||
expect($log)->notEmpty();
|
||||
}
|
||||
|
||||
public function _after() {
|
||||
ORM::raw_execute('TRUNCATE ' . Log::$_table);
|
||||
}
|
||||
}
|
||||
|
@ -17,7 +17,8 @@ class LoggerFactoryTest extends \MailPoetUnitTest {
|
||||
public function _before() {
|
||||
parent::_before();
|
||||
$this->settings = $this->createMock(SettingsController::class);
|
||||
$this->loggerFactory = new LoggerFactory($this->settings);
|
||||
$repository = $this->createMock(LogRepository::class);
|
||||
$this->loggerFactory = new LoggerFactory($repository, $this->settings);
|
||||
}
|
||||
|
||||
public function testItCreatesLogger() {
|
||||
|
Loading…
x
Reference in New Issue
Block a user