1
0
mirror of https://github.com/Seldaek/monolog.git synced 2025-08-03 11:47:38 +02:00

made raven user context less destructive

This commit is contained in:
Stepan Mazurov
2015-04-13 19:22:16 -06:00
parent a54d460500
commit 09be78d62a
3 changed files with 34 additions and 15 deletions

View File

@@ -127,8 +127,7 @@ class RavenHandler extends AbstractProcessingHandler
*/ */
protected function write(array $record) protected function write(array $record)
{ {
// ensures user context is empty $previousUserContext = false;
$this->ravenClient->user_context(null);
$options = array(); $options = array();
$options['level'] = $this->logLevels[$record['level']]; $options['level'] = $this->logLevels[$record['level']];
$options['tags'] = array(); $options['tags'] = array();
@@ -149,6 +148,7 @@ class RavenHandler extends AbstractProcessingHandler
if (!empty($record['context'])) { if (!empty($record['context'])) {
$options['extra']['context'] = $record['context']; $options['extra']['context'] = $record['context'];
if (!empty($record['context']['user'])) { if (!empty($record['context']['user'])) {
$previousUserContext = $this->ravenClient->context->user;
$this->ravenClient->user_context($record['context']['user']); $this->ravenClient->user_context($record['context']['user']);
unset($options['extra']['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) { if (isset($record['context']['exception']) && $record['context']['exception'] instanceof \Exception) {
$options['extra']['message'] = $record['formatted']; $options['extra']['message'] = $record['formatted'];
$this->ravenClient->captureException($record['context']['exception'], $options); $this->ravenClient->captureException($record['context']['exception'], $options);
} else {
return; $this->ravenClient->captureMessage($record['formatted'], array(), $options);
}
if ($previousUserContext !== false) {
$this->ravenClient->user_context($previousUserContext);
} }
$this->ravenClient->captureMessage($record['formatted'], array(), $options);
} }
/** /**

View File

@@ -17,6 +17,7 @@ class MockRavenClient extends Raven_Client
{ {
public function capture($data, $stack, $vars = null) public function capture($data, $stack, $vars = null)
{ {
$data = array_merge($this->get_user_data(), $data);
$this->lastData = $data; $this->lastData = $data;
$this->lastStack = $stack; $this->lastStack = $stack;
} }

View File

@@ -19,8 +19,8 @@ class RavenHandlerTest extends TestCase
{ {
public function setUp() public function setUp()
{ {
if (!class_exists("Raven_Client")) { if (!class_exists('Raven_Client')) {
$this->markTestSkipped("raven/raven not installed"); $this->markTestSkipped('raven/raven not installed');
} }
require_once __DIR__ . '/MockRavenClient.php'; require_once __DIR__ . '/MockRavenClient.php';
@@ -54,7 +54,7 @@ class RavenHandlerTest extends TestCase
$ravenClient = $this->getRavenClient(); $ravenClient = $this->getRavenClient();
$handler = $this->getHandler($ravenClient); $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); $handler->handle($record);
$this->assertEquals($ravenClient::DEBUG, $ravenClient->lastData['level']); $this->assertEquals($ravenClient::DEBUG, $ravenClient->lastData['level']);
@@ -66,7 +66,7 @@ class RavenHandlerTest extends TestCase
$ravenClient = $this->getRavenClient(); $ravenClient = $this->getRavenClient();
$handler = $this->getHandler($ravenClient); $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); $handler->handle($record);
$this->assertEquals($ravenClient::WARNING, $ravenClient->lastData['level']); $this->assertEquals($ravenClient::WARNING, $ravenClient->lastData['level']);
@@ -79,7 +79,7 @@ class RavenHandlerTest extends TestCase
$handler = $this->getHandler($ravenClient); $handler = $this->getHandler($ravenClient);
$tags = array(1, 2, 'foo'); $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); $handler->handle($record);
$this->assertEquals($tags, $ravenClient->lastData['tags']); $this->assertEquals($tags, $ravenClient->lastData['tags']);
@@ -90,18 +90,33 @@ class RavenHandlerTest extends TestCase
$ravenClient = $this->getRavenClient(); $ravenClient = $this->getRavenClient();
$handler = $this->getHandler($ravenClient); $handler = $this->getHandler($ravenClient);
$recordWithNoContext = $this->getRecord(Logger::INFO, 'test with default user context');
// set user context 'externally'
$user = array( $user = array(
'id' => '123', 'id' => '123',
'email' => 'test@test.com' 'email' => 'test@test.com'
); );
$record = $this->getRecord(Logger::INFO, "test", array('user' => $user));
$handler->handle($record); $recordWithContext = $this->getRecord(Logger::INFO, 'test', array('user' => $user));
$this->assertEquals($user, $ravenClient->context->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); $this->assertNull($ravenClient->context->user);
} }