diff --git a/src/Monolog/Handler/RavenHandler.php b/src/Monolog/Handler/RavenHandler.php index 69da8cae..7fedc16f 100644 --- a/src/Monolog/Handler/RavenHandler.php +++ b/src/Monolog/Handler/RavenHandler.php @@ -127,8 +127,7 @@ class RavenHandler extends AbstractProcessingHandler */ protected function write(array $record) { - // ensures user context is empty - $this->ravenClient->user_context(null); + $previousUserContext = false; $options = array(); $options['level'] = $this->logLevels[$record['level']]; $options['tags'] = array(); @@ -149,6 +148,7 @@ class RavenHandler extends AbstractProcessingHandler if (!empty($record['context'])) { $options['extra']['context'] = $record['context']; if (!empty($record['context']['user'])) { + $previousUserContext = $this->ravenClient->context->user; $this->ravenClient->user_context($record['context']['user']); unset($options['extra']['context']['user']); } @@ -160,11 +160,14 @@ class RavenHandler extends AbstractProcessingHandler if (isset($record['context']['exception']) && $record['context']['exception'] instanceof \Exception) { $options['extra']['message'] = $record['formatted']; $this->ravenClient->captureException($record['context']['exception'], $options); - - return; + } else { + $this->ravenClient->captureMessage($record['formatted'], array(), $options); + } + + if ($previousUserContext !== false) { + $this->ravenClient->user_context($previousUserContext); } - $this->ravenClient->captureMessage($record['formatted'], array(), $options); } /** diff --git a/tests/Monolog/Handler/MockRavenClient.php b/tests/Monolog/Handler/MockRavenClient.php index fbaab9bc..a0833225 100644 --- a/tests/Monolog/Handler/MockRavenClient.php +++ b/tests/Monolog/Handler/MockRavenClient.php @@ -17,6 +17,7 @@ class MockRavenClient extends Raven_Client { public function capture($data, $stack, $vars = null) { + $data = array_merge($this->get_user_data(), $data); $this->lastData = $data; $this->lastStack = $stack; } diff --git a/tests/Monolog/Handler/RavenHandlerTest.php b/tests/Monolog/Handler/RavenHandlerTest.php index c7b4136c..9a9d1006 100644 --- a/tests/Monolog/Handler/RavenHandlerTest.php +++ b/tests/Monolog/Handler/RavenHandlerTest.php @@ -19,8 +19,8 @@ class RavenHandlerTest extends TestCase { public function setUp() { - if (!class_exists("Raven_Client")) { - $this->markTestSkipped("raven/raven not installed"); + if (!class_exists('Raven_Client')) { + $this->markTestSkipped('raven/raven not installed'); } require_once __DIR__ . '/MockRavenClient.php'; @@ -54,7 +54,7 @@ class RavenHandlerTest extends TestCase $ravenClient = $this->getRavenClient(); $handler = $this->getHandler($ravenClient); - $record = $this->getRecord(Logger::DEBUG, "A test debug message"); + $record = $this->getRecord(Logger::DEBUG, 'A test debug message'); $handler->handle($record); $this->assertEquals($ravenClient::DEBUG, $ravenClient->lastData['level']); @@ -66,7 +66,7 @@ class RavenHandlerTest extends TestCase $ravenClient = $this->getRavenClient(); $handler = $this->getHandler($ravenClient); - $record = $this->getRecord(Logger::WARNING, "A test warning message"); + $record = $this->getRecord(Logger::WARNING, 'A test warning message'); $handler->handle($record); $this->assertEquals($ravenClient::WARNING, $ravenClient->lastData['level']); @@ -79,7 +79,7 @@ class RavenHandlerTest extends TestCase $handler = $this->getHandler($ravenClient); $tags = array(1, 2, 'foo'); - $record = $this->getRecord(Logger::INFO, "test", array('tags' => $tags)); + $record = $this->getRecord(Logger::INFO, 'test', array('tags' => $tags)); $handler->handle($record); $this->assertEquals($tags, $ravenClient->lastData['tags']); @@ -90,18 +90,33 @@ class RavenHandlerTest extends TestCase $ravenClient = $this->getRavenClient(); $handler = $this->getHandler($ravenClient); + $recordWithNoContext = $this->getRecord(Logger::INFO, 'test with default user context'); + // set user context 'externally' + $user = array( 'id' => '123', 'email' => 'test@test.com' ); - $record = $this->getRecord(Logger::INFO, "test", array('user' => $user)); - $handler->handle($record); - $this->assertEquals($user, $ravenClient->context->user); + $recordWithContext = $this->getRecord(Logger::INFO, 'test', array('user' => $user)); - $secondRecord = $this->getRecord(Logger::INFO, "test without user"); + $ravenClient->user_context(array('id' => 'test_user_id')); + // handle context + $handler->handle($recordWithContext); + $this->assertEquals($user, $ravenClient->lastData['sentry.interfaces.User']); - $handler->handle($secondRecord); + // check to see if its reset + $handler->handle($recordWithNoContext); + $this->assertInternalType('array', $ravenClient->context->user); + $this->assertSame('test_user_id', $ravenClient->context->user['id']); + + // handle with null context + $ravenClient->user_context(null); + $handler->handle($recordWithContext); + $this->assertEquals($user, $ravenClient->lastData['sentry.interfaces.User']); + + // check to see if its reset + $handler->handle($recordWithNoContext); $this->assertNull($ravenClient->context->user); }