mirror of
https://github.com/Seldaek/monolog.git
synced 2025-08-09 14:46:46 +02:00
Added a new ResettableInterface and implemented it where possible.
When one use Monolog in a long process like an AMQP worker with a `FingersCrossedHandler` or `BufferHandler` there is a drawback: as soon as there is an AMQP message that generate a log >= error (for example), all next AMQP messages will output logs, even if theses messages don't generate log where level >= error. In the same context there is a drawback for processor that add an UUID to the logs. The UUID should change for each AMQP messages. --- This patch address this issue with a new interface: `ResettableInterface` interface. Side note: `reset()`, `flush()`, `clear()`, are already used in Monolog. So basically, one can use the `reset()` on the `Logger` and on some `Handler`s / `Processor`s. It's especially useful for * the `FingersCrossedHandler`: it `close()` the buffer, then it `clear()` the buffer. * the `BufferHandler`: it `flush()` the buffer, then it `clear()` the buffer. * the `UidProcessor`: it renew the `uid`.
This commit is contained in:
@@ -21,7 +21,7 @@ class BrowserConsoleHandlerTest extends TestCase
|
||||
{
|
||||
protected function setUp()
|
||||
{
|
||||
BrowserConsoleHandler::reset();
|
||||
BrowserConsoleHandler::resetStatic();
|
||||
}
|
||||
|
||||
protected function generateScript()
|
||||
|
@@ -21,7 +21,7 @@ class ChromePHPHandlerTest extends TestCase
|
||||
{
|
||||
protected function setUp()
|
||||
{
|
||||
TestChromePHPHandler::reset();
|
||||
TestChromePHPHandler::resetStatic();
|
||||
$_SERVER['HTTP_USER_AGENT'] = 'Monolog Test; Chrome/1.0';
|
||||
}
|
||||
|
||||
@@ -136,7 +136,7 @@ class TestChromePHPHandler extends ChromePHPHandler
|
||||
{
|
||||
protected $headers = array();
|
||||
|
||||
public static function reset()
|
||||
public static function resetStatic()
|
||||
{
|
||||
self::$initialized = false;
|
||||
self::$overflowed = false;
|
||||
|
@@ -58,7 +58,7 @@ class FingersCrossedHandlerTest extends TestCase
|
||||
* @covers Monolog\Handler\FingersCrossedHandler::activate
|
||||
* @covers Monolog\Handler\FingersCrossedHandler::reset
|
||||
*/
|
||||
public function testHandleRestartBufferingAfterReset()
|
||||
public function testHandleResetBufferingAfterReset()
|
||||
{
|
||||
$test = new TestHandler();
|
||||
$handler = new FingersCrossedHandler($test);
|
||||
@@ -76,7 +76,7 @@ class FingersCrossedHandlerTest extends TestCase
|
||||
* @covers Monolog\Handler\FingersCrossedHandler::handle
|
||||
* @covers Monolog\Handler\FingersCrossedHandler::activate
|
||||
*/
|
||||
public function testHandleRestartBufferingAfterBeingTriggeredWhenStopBufferingIsDisabled()
|
||||
public function testHandleResetBufferingAfterBeingTriggeredWhenStopBufferingIsDisabled()
|
||||
{
|
||||
$test = new TestHandler();
|
||||
$handler = new FingersCrossedHandler($test, Logger::WARNING, 0, false, false);
|
||||
|
@@ -21,7 +21,7 @@ class FirePHPHandlerTest extends TestCase
|
||||
{
|
||||
public function setUp()
|
||||
{
|
||||
TestFirePHPHandler::reset();
|
||||
TestFirePHPHandler::resetStatic();
|
||||
$_SERVER['HTTP_USER_AGENT'] = 'Monolog Test; FirePHP/1.0';
|
||||
}
|
||||
|
||||
@@ -77,7 +77,7 @@ class TestFirePHPHandler extends FirePHPHandler
|
||||
{
|
||||
protected $headers = array();
|
||||
|
||||
public static function reset()
|
||||
public static function resetStatic()
|
||||
{
|
||||
self::$initialized = false;
|
||||
self::$sendHeaders = true;
|
||||
|
@@ -614,4 +614,77 @@ class LoggerTest extends \PHPUnit_Framework_TestCase
|
||||
$logger->pushHandler($handler);
|
||||
$logger->info('test');
|
||||
}
|
||||
|
||||
public function testReset()
|
||||
{
|
||||
$logger = new Logger('app');
|
||||
|
||||
$testHandler = new Handler\TestHandler();
|
||||
$bufferHandler = new Handler\BufferHandler($testHandler);
|
||||
$groupHandler = new Handler\GroupHandler(array($bufferHandler));
|
||||
$fingersCrossedHandler = new Handler\FingersCrossedHandler($groupHandler);
|
||||
|
||||
$logger->pushHandler($fingersCrossedHandler);
|
||||
|
||||
$processorUid1 = new Processor\UidProcessor(10);
|
||||
$uid1 = $processorUid1->getUid();
|
||||
$groupHandler->pushProcessor($processorUid1);
|
||||
|
||||
$processorUid2 = new Processor\UidProcessor(5);
|
||||
$uid2 = $processorUid2->getUid();
|
||||
$logger->pushProcessor($processorUid2);
|
||||
|
||||
$getProperty = function ($object, $property) {
|
||||
$reflectionProperty = new \ReflectionProperty(get_class($object), $property);
|
||||
$reflectionProperty->setAccessible(true);
|
||||
|
||||
return $reflectionProperty->getValue($object);
|
||||
};
|
||||
$that = $this;
|
||||
$assertBufferOfBufferHandlerEmpty = function () use ($getProperty, $bufferHandler, $that) {
|
||||
$that->assertEmpty($getProperty($bufferHandler, 'buffer'));
|
||||
};
|
||||
$assertBuffersEmpty = function() use ($assertBufferOfBufferHandlerEmpty, $getProperty, $fingersCrossedHandler, $that) {
|
||||
$assertBufferOfBufferHandlerEmpty();
|
||||
$that->assertEmpty($getProperty($fingersCrossedHandler, 'buffer'));
|
||||
};
|
||||
|
||||
$logger->debug('debug');
|
||||
$logger->reset();
|
||||
$assertBuffersEmpty();
|
||||
$this->assertFalse($testHandler->hasDebugRecords());
|
||||
$this->assertFalse($testHandler->hasErrorRecords());
|
||||
$this->assertNotSame($uid1, $uid1 = $processorUid1->getUid());
|
||||
$this->assertNotSame($uid2, $uid2 = $processorUid2->getUid());
|
||||
|
||||
$logger->debug('debug');
|
||||
$logger->error('error');
|
||||
$logger->reset();
|
||||
$assertBuffersEmpty();
|
||||
$this->assertTrue($testHandler->hasDebugRecords());
|
||||
$this->assertTrue($testHandler->hasErrorRecords());
|
||||
$this->assertNotSame($uid1, $uid1 = $processorUid1->getUid());
|
||||
$this->assertNotSame($uid2, $uid2 = $processorUid2->getUid());
|
||||
|
||||
$logger->info('info');
|
||||
$this->assertNotEmpty($getProperty($fingersCrossedHandler, 'buffer'));
|
||||
$assertBufferOfBufferHandlerEmpty();
|
||||
$this->assertFalse($testHandler->hasInfoRecords());
|
||||
|
||||
$logger->reset();
|
||||
$assertBuffersEmpty();
|
||||
$this->assertFalse($testHandler->hasInfoRecords());
|
||||
$this->assertNotSame($uid1, $uid1 = $processorUid1->getUid());
|
||||
$this->assertNotSame($uid2, $uid2 = $processorUid2->getUid());
|
||||
|
||||
$logger->notice('notice');
|
||||
$logger->emergency('emergency');
|
||||
$logger->reset();
|
||||
$assertBuffersEmpty();
|
||||
$this->assertFalse($testHandler->hasInfoRecords());
|
||||
$this->assertTrue($testHandler->hasNoticeRecords());
|
||||
$this->assertTrue($testHandler->hasEmergencyRecords());
|
||||
$this->assertNotSame($uid1, $processorUid1->getUid());
|
||||
$this->assertNotSame($uid2, $processorUid2->getUid());
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user