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:
@@ -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);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@@ -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;
|
||||||
}
|
}
|
||||||
|
@@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user