mirror of
https://github.com/Seldaek/monolog.git
synced 2025-08-08 22:26:41 +02:00
Merge branch '2.x'
This commit is contained in:
@@ -793,6 +793,58 @@ class LoggerTest extends TestCase
|
||||
$this->assertEquals($datetime->format('Y-m-d H:i:s'), $record->datetime->format('Y-m-d H:i:s'));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @requires PHP 8.1
|
||||
*/
|
||||
public function testLogCycleDetectionWithFibersWithoutCycle()
|
||||
{
|
||||
$logger = new Logger(__METHOD__);
|
||||
|
||||
$fiberSuspendHandler = new FiberSuspendHandler();
|
||||
$testHandler = new TestHandler();
|
||||
|
||||
$logger->pushHandler($fiberSuspendHandler);
|
||||
$logger->pushHandler($testHandler);
|
||||
|
||||
$fibers = [];
|
||||
for ($i = 0; $i < 10; $i++) {
|
||||
$fiber = new \Fiber(static function () use ($logger) {
|
||||
$logger->info('test');
|
||||
});
|
||||
|
||||
$fiber->start();
|
||||
|
||||
// We need to keep a reference here, because otherwise the fiber gets automatically cleaned up
|
||||
$fibers[] = $fiber;
|
||||
}
|
||||
|
||||
self::assertCount(10, $testHandler->getRecords());
|
||||
}
|
||||
|
||||
/**
|
||||
* @requires PHP 8.1
|
||||
*/
|
||||
public function testLogCycleDetectionWithFibersWithCycle()
|
||||
{
|
||||
$logger = new Logger(__METHOD__);
|
||||
|
||||
$fiberSuspendHandler = new FiberSuspendHandler();
|
||||
$loggingHandler = new LoggingHandler($logger);
|
||||
$testHandler = new TestHandler();
|
||||
|
||||
$logger->pushHandler($fiberSuspendHandler);
|
||||
$logger->pushHandler($loggingHandler);
|
||||
$logger->pushHandler($testHandler);
|
||||
|
||||
$fiber = new \Fiber(static function () use ($logger) {
|
||||
$logger->info('test');
|
||||
});
|
||||
|
||||
$fiber->start();
|
||||
|
||||
self::assertCount(3, $testHandler->getRecords());
|
||||
}
|
||||
}
|
||||
|
||||
class LoggingHandler implements HandlerInterface
|
||||
@@ -827,3 +879,27 @@ class LoggingHandler implements HandlerInterface
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
class FiberSuspendHandler implements HandlerInterface
|
||||
{
|
||||
public function isHandling(LogRecord $record): bool
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
public function handle(LogRecord $record): bool
|
||||
{
|
||||
\Fiber::suspend();
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
public function handleBatch(array $records): void
|
||||
{
|
||||
}
|
||||
|
||||
public function close(): void
|
||||
{
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user