Skip to content

Commit 6d3d3e4

Browse files
committed
Merge branch 'feat/logs-flush' into feat/logback-spring-boot
2 parents 4481361 + 89b6643 commit 6d3d3e4

File tree

3 files changed

+98
-10
lines changed

3 files changed

+98
-10
lines changed

sentry-logback/src/main/java/io/sentry/logback/SentryAppender.java

Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -16,12 +16,15 @@
1616
import io.sentry.InitPriority;
1717
import io.sentry.ScopesAdapter;
1818
import io.sentry.Sentry;
19+
import io.sentry.SentryAttribute;
20+
import io.sentry.SentryAttributes;
1921
import io.sentry.SentryEvent;
2022
import io.sentry.SentryIntegrationPackageStorage;
2123
import io.sentry.SentryLevel;
2224
import io.sentry.SentryLogLevel;
2325
import io.sentry.SentryOptions;
2426
import io.sentry.exception.ExceptionMechanismException;
27+
import io.sentry.logger.SentryLogParameters;
2528
import io.sentry.protocol.Mechanism;
2629
import io.sentry.protocol.Message;
2730
import io.sentry.protocol.SdkVersion;
@@ -177,14 +180,20 @@ protected void append(@NotNull ILoggingEvent eventObject) {
177180
protected void captureLog(@NotNull ILoggingEvent loggingEvent) {
178181
final @NotNull SentryLogLevel sentryLevel = toSentryLogLevel(loggingEvent.getLevel());
179182

180-
// // if encoder is set we treat message+params as PII as encoders may be used to mask/strip
181-
// PII
182-
// if (encoder == null || options.isSendDefaultPii()) {
183-
// message.setMessage(loggingEvent.getMessage());
184-
// message.setParams(toParams(loggingEvent.getArgumentArray()));
185-
// }
183+
@Nullable Object[] arguments = null;
184+
final @NotNull SentryAttributes attributes = SentryAttributes.of();
186185

187-
Sentry.logger().log(sentryLevel, formatted(loggingEvent), loggingEvent.getArgumentArray());
186+
// if encoder is set we treat message+params as PII as encoders may be used to mask/strip PII
187+
if (encoder == null || options.isSendDefaultPii()) {
188+
attributes.add(
189+
SentryAttribute.stringAttribute("sentry.message.template", loggingEvent.getMessage()));
190+
arguments = loggingEvent.getArgumentArray();
191+
}
192+
193+
final @NotNull String formattedMessage = formatted(loggingEvent);
194+
final @NotNull SentryLogParameters params = SentryLogParameters.create(attributes);
195+
196+
Sentry.logger().log(sentryLevel, params, formattedMessage, arguments);
188197
}
189198

190199
private String formatted(@NotNull ILoggingEvent loggingEvent) {

sentry-logback/src/test/kotlin/io/sentry/logback/SentryAppenderTest.kt

Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -386,6 +386,83 @@ class SentryAppenderTest {
386386
)
387387
}
388388

389+
@Test
390+
fun `sends formatted log message if no encoder`() {
391+
fixture = Fixture(minimumLevel = Level.TRACE, enableLogs = true)
392+
fixture.logger.trace("Testing {} level", "TRACE")
393+
394+
Sentry.flush(1000)
395+
396+
verify(fixture.transport).send(
397+
checkLogs { logs ->
398+
val log = logs.items.first()
399+
assertEquals("Testing TRACE level", log.body)
400+
val attributes = log.attributes!!
401+
assertEquals("Testing {} level", attributes["sentry.message.template"]?.value)
402+
assertEquals("TRACE", attributes["sentry.message.parameter.0"]?.value)
403+
}
404+
)
405+
}
406+
407+
@Test
408+
fun `does not send formatted log message if encoder is available but sendDefaultPii is off`() {
409+
var encoder = PatternLayoutEncoder()
410+
encoder.pattern = "encoderadded %msg"
411+
fixture = Fixture(minimumLevel = Level.TRACE, enableLogs = true, encoder = encoder)
412+
fixture.logger.trace("Testing {} level", "TRACE")
413+
414+
Sentry.flush(1000)
415+
416+
verify(fixture.transport).send(
417+
checkLogs { logs ->
418+
val log = logs.items.first()
419+
assertEquals("encoderadded Testing TRACE level", log.body)
420+
val attributes = log.attributes!!
421+
assertNull(attributes["sentry.message.template"])
422+
assertNull(attributes["sentry.message.parameter.0"])
423+
}
424+
)
425+
}
426+
427+
@Test
428+
fun `sends formatted log message if encoder is available and sendDefaultPii is on but encoder throws`() {
429+
var encoder = ThrowingEncoder()
430+
fixture = Fixture(minimumLevel = Level.TRACE, enableLogs = true, sendDefaultPii = true, encoder = encoder)
431+
fixture.logger.trace("Testing {} level", "TRACE")
432+
433+
Sentry.flush(1000)
434+
435+
verify(fixture.transport).send(
436+
checkLogs { logs ->
437+
val log = logs.items.first()
438+
assertEquals("Testing TRACE level", log.body)
439+
val attributes = log.attributes!!
440+
assertEquals("Testing {} level", attributes["sentry.message.template"]?.value)
441+
assertEquals("TRACE", attributes["sentry.message.parameter.0"]?.value)
442+
}
443+
)
444+
}
445+
446+
@Test
447+
fun `sends formatted log message if encoder is available and sendDefaultPii is on`() {
448+
var encoder = PatternLayoutEncoder()
449+
encoder.pattern = "encoderadded %msg"
450+
fixture = Fixture(minimumLevel = Level.TRACE, enableLogs = true, sendDefaultPii = true, encoder = encoder)
451+
fixture.logger.trace("Testing {} level", "TRACE")
452+
453+
Sentry.flush(1000)
454+
455+
verify(fixture.transport).send(
456+
checkLogs { logs ->
457+
val log = logs.items.first()
458+
assertEquals("encoderadded Testing TRACE level", log.body)
459+
val attributes = log.attributes!!
460+
assertEquals("Testing {} level", attributes["sentry.message.template"]?.value)
461+
assertEquals("TRACE", attributes["sentry.message.parameter.0"]?.value)
462+
}
463+
)
464+
}
465+
389466
@Test
390467
fun `attaches thread information`() {
391468
fixture = Fixture(minimumEventLevel = Level.WARN)

sentry/src/main/java/io/sentry/logger/LoggerApi.java

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -184,9 +184,11 @@ private void captureLog(
184184
i++;
185185
}
186186
if (i > 0) {
187-
attributes.put(
188-
"sentry.message.template",
189-
new SentryLogEventAttributeValue(SentryAttributeType.STRING, message));
187+
if (attributes.get("sentry.message.template") == null) {
188+
attributes.put(
189+
"sentry.message.template",
190+
new SentryLogEventAttributeValue(SentryAttributeType.STRING, message));
191+
}
190192
}
191193
}
192194

0 commit comments

Comments
 (0)