Skip to content

Commit 28bf0ce

Browse files
authored
Fix missing user attributes on logs (#1864)
1 parent 3b9eff4 commit 28bf0ce

File tree

2 files changed

+73
-1
lines changed

2 files changed

+73
-1
lines changed

src/Logs/LogsAggregator.php

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,21 @@ public function add(
8484
$log->setAttribute('sentry.sdk.version', $client->getSdkVersion());
8585
}
8686

87+
$hub->configureScope(function (Scope $scope) use ($log) {
88+
$user = $scope->getUser();
89+
if ($user !== null) {
90+
if ($user->getId() !== null) {
91+
$log->setAttribute('user.id', $user->getId());
92+
}
93+
if ($user->getEmail() !== null) {
94+
$log->setAttribute('user.email', $user->getEmail());
95+
}
96+
if ($user->getUsername() !== null) {
97+
$log->setAttribute('user.name', $user->getUsername());
98+
}
99+
}
100+
});
101+
87102
foreach ($values as $key => $value) {
88103
$log->setAttribute("sentry.message.parameter.{$key}", $value);
89104
}

tests/Logs/LogsAggregatorTest.php

Lines changed: 58 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,18 @@
55
namespace Sentry\Tests\Logs;
66

77
use PHPUnit\Framework\TestCase;
8+
use Sentry\Client;
89
use Sentry\ClientBuilder;
910
use Sentry\Logs\LogLevel;
1011
use Sentry\Logs\LogsAggregator;
1112
use Sentry\SentrySdk;
1213
use Sentry\State\Hub;
14+
use Sentry\State\Scope;
15+
use Sentry\Tracing\Span;
16+
use Sentry\Tracing\SpanContext;
17+
use Sentry\Tracing\SpanId;
18+
use Sentry\Tracing\TraceId;
19+
use Sentry\UserDataBag;
1320

1421
final class LogsAggregatorTest extends TestCase
1522
{
@@ -35,7 +42,7 @@ public function testMessageFormatting(string $message, array $values, string $ex
3542

3643
$log = $logs[0];
3744

38-
$this->assertEquals($expected, $log->getBody());
45+
$this->assertSame($expected, $log->getBody());
3946
}
4047

4148
public static function messageFormattingDataProvider(): \Generator
@@ -82,4 +89,54 @@ public static function messageFormattingDataProvider(): \Generator
8289
: 'Message with a percentage: 42',
8390
];
8491
}
92+
93+
public function testAttributesAreAddedToLogMessage(): void
94+
{
95+
$client = ClientBuilder::create([
96+
'enable_logs' => true,
97+
'release' => '1.0.0',
98+
'environment' => 'production',
99+
'server_name' => 'web-server-01',
100+
])->getClient();
101+
102+
$hub = new Hub($client);
103+
SentrySdk::setCurrentHub($hub);
104+
105+
$hub->configureScope(function (Scope $scope) {
106+
$userDataBag = new UserDataBag();
107+
$userDataBag->setId('unique_id');
108+
$userDataBag->setEmail('[email protected]');
109+
$userDataBag->setUsername('my_user');
110+
$scope->setUser($userDataBag);
111+
});
112+
113+
$spanContext = new SpanContext();
114+
$spanContext->setTraceId(new TraceId('566e3688a61d4bc888951642d6f14a19'));
115+
$spanContext->setSpanId(new SpanId('566e3688a61d4bc8'));
116+
$span = new Span($spanContext);
117+
$hub->setSpan($span);
118+
119+
$aggregator = new LogsAggregator();
120+
121+
$aggregator->add(LogLevel::info(), 'User %s performed action %s', [
122+
'testuser', 'login',
123+
]);
124+
125+
$logs = $aggregator->all();
126+
$this->assertCount(1, $logs);
127+
128+
$log = $logs[0];
129+
$attributes = $log->attributes();
130+
131+
$this->assertSame('1.0.0', $attributes->get('sentry.release')->getValue());
132+
$this->assertSame('production', $attributes->get('sentry.environment')->getValue());
133+
$this->assertSame('web-server-01', $attributes->get('sentry.server.address')->getValue());
134+
$this->assertSame('User %s performed action %s', $attributes->get('sentry.message.template')->getValue());
135+
$this->assertSame('566e3688a61d4bc8', $attributes->get('sentry.trace.parent_span_id')->getValue());
136+
$this->assertSame('sentry.php', $attributes->get('sentry.sdk.name')->getValue());
137+
$this->assertSame(Client::SDK_VERSION, $attributes->get('sentry.sdk.version')->getValue());
138+
$this->assertSame('unique_id', $attributes->get('user.id')->getValue());
139+
$this->assertSame('[email protected]', $attributes->get('user.email')->getValue());
140+
$this->assertSame('my_user', $attributes->get('user.name')->getValue());
141+
}
85142
}

0 commit comments

Comments
 (0)