Skip to content
This repository was archived by the owner on Aug 30, 2023. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 1 addition & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -21,12 +21,9 @@ Sentry SDK for Java and Android
| sentry-android-core | [![sentry-android-core](https://img.shields.io/bintray/v/getsentry/sentry-android/io.sentry:sentry-android-core)](https://bintray.com/getsentry/sentry-android/io.sentry:sentry-android-core?tab=overview) | 14 |
| sentry-android-ndk | [![sentry-android-ndk](https://img.shields.io/bintray/v/getsentry/sentry-android/io.sentry:sentry-android-ndk)](https://bintray.com/getsentry/sentry-android/io.sentry:sentry-android-ndk?tab=overview) | 16 |
| sentry-android-timber | [![sentry-android-timber](https://img.shields.io/bintray/v/getsentry/sentry-android/io.sentry:sentry-android-timber)](https://bintray.com/getsentry/sentry-android/io.sentry:sentry-android-timber?tab=overview) | 14 |
| sentry-core | [![sentry-core](https://img.shields.io/bintray/v/getsentry/sentry-android/io.sentry:sentry-core)](https://bintray.com/getsentry/sentry-android/io.sentry:sentry-core?tab=overview) | 14 |
| sentry | [![sentry](https://img.shields.io/bintray/v/getsentry/sentry-java/io.sentry:sentry)](https://bintray.com/getsentry/sentry-java/io.sentry:sentry?tab=overview) | |
| sentry | [![sentry](https://img.shields.io/bintray/v/getsentry/sentry-java/io.sentry:sentry)](https://bintray.com/getsentry/sentry-java/io.sentry:sentry?tab=overview) | 14 |
| sentry-spring-boot-starter | [![sentry-spring-boot-starter](https://img.shields.io/bintray/v/getsentry/sentry-java/io.sentry:sentry-spring-boot-starter)](https://bintray.com/getsentry/sentry-java/io.sentry:sentry-spring-boot-starter?tab=overview) | |
| sentry-spring | [![sentry-spring](https://img.shields.io/bintray/v/getsentry/sentry-java/io.sentry:sentry-spring)](https://bintray.com/getsentry/sentry-java/io.sentry:sentry-spring?tab=overview) | |
| sentry-spring-boot-starter | [![sentry-spring-boot-starter](https://img.shields.io/bintray/v/getsentry/sentry-java/io.sentry:sentry-spring-boot-starter)](https://bintray.com/getsentry/sentry-java/io.sentry:sentry-spring-boot-starter?tab=overview) | |
| sentry-appengine | [![sentry-appengine](https://img.shields.io/bintray/v/getsentry/sentry-java/io.sentry:sentry-appengine)](https://bintray.com/getsentry/sentry-java/io.sentry:sentry-appengine?tab=overview) | |
| sentry-log4j | [![sentry-log4j](https://img.shields.io/bintray/v/getsentry/sentry-java/io.sentry:sentry-log4j)](https://bintray.com/getsentry/sentry-java/io.sentry:sentry-log4j?tab=overview) | |
| sentry-log4j2 | [![sentry-log4j2](https://img.shields.io/bintray/v/getsentry/sentry-java/io.sentry:sentry-log4j2)](https://bintray.com/getsentry/sentry-java/io.sentry:sentry-log4j2?tab=overview) | |

Expand Down
14 changes: 14 additions & 0 deletions sentry-core/src/main/java/io/sentry/core/SentryEnvelopeItem.java
Original file line number Diff line number Diff line change
@@ -1,10 +1,14 @@
package io.sentry.core;

import io.sentry.core.util.Objects;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.Reader;
import java.io.Writer;
import java.nio.charset.Charset;
import java.util.concurrent.Callable;
Expand Down Expand Up @@ -72,6 +76,16 @@ public final class SentryEnvelopeItem {
return new SentryEnvelopeItem(itemHeader, () -> cachedItem.getBytes());
}

public @Nullable SentryEvent getEvent(final @NotNull ISerializer serializer) throws Exception {
if (header == null || header.getType() != SentryItemType.Event) {
return null;
}
try (final Reader eventReader =
new BufferedReader(new InputStreamReader(new ByteArrayInputStream(getData()), UTF_8))) {
return serializer.deserializeEvent(eventReader);
}
}

public static @NotNull SentryEnvelopeItem fromEvent(
final @NotNull ISerializer serializer, final @NotNull SentryEvent event) throws IOException {
Objects.requireNonNull(serializer, "ISerializer is required.");
Expand Down
1 change: 1 addition & 0 deletions sentry-log4j2/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ dependencies {
compileOnly(Config.CompileOnly.jetbrainsAnnotations)

// tests
testImplementation(project(":sentry-test-support"))
testImplementation(kotlin(Config.kotlinStdLib))
testImplementation(Config.TestLibs.kotlinTestJunit)
testImplementation(Config.TestLibs.mockitoKotlin)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,11 @@
package io.sentry.log4j2

import com.nhaarman.mockitokotlin2.check
import com.nhaarman.mockitokotlin2.mock
import com.nhaarman.mockitokotlin2.verify
import io.sentry.core.HubAdapter
import io.sentry.core.SentryEvent
import io.sentry.core.SentryLevel
import io.sentry.core.transport.ITransport
import io.sentry.test.checkEvent
import java.time.Instant
import java.time.LocalDateTime
import java.time.ZoneId
Expand Down Expand Up @@ -74,11 +73,11 @@ class SentryAppenderTest {
logger.debug("testing message conversion {}, {}", 1, 2)

await.untilAsserted {
verify(fixture.transport).send(check { it: SentryEvent ->
assertEquals("testing message conversion 1, 2", it.message.formatted)
assertEquals("testing message conversion {}, {}", it.message.message)
assertEquals(listOf("1", "2"), it.message.params)
assertEquals("io.sentry.log4j2.SentryAppenderTest", it.logger)
verify(fixture.transport).send(checkEvent { event ->
assertEquals("testing message conversion 1, 2", event.message.formatted)
assertEquals("testing message conversion {}, {}", event.message.message)
assertEquals(listOf("1", "2"), event.message.params)
assertEquals("io.sentry.log4j2.SentryAppenderTest", event.logger)
})
}
}
Expand All @@ -92,8 +91,8 @@ class SentryAppenderTest {
logger.debug("testing event date")

await.untilAsserted {
verify(fixture.transport).send(check { it: SentryEvent ->
val eventTime = Instant.ofEpochMilli(it.timestamp.time)
verify(fixture.transport).send(checkEvent { event ->
val eventTime = Instant.ofEpochMilli(event.timestamp.time)
.atZone(ZoneId.systemDefault())
.toLocalDateTime()

Expand All @@ -110,8 +109,8 @@ class SentryAppenderTest {
logger.trace("testing trace level")

await.untilAsserted {
verify(fixture.transport).send(check { it: SentryEvent ->
assertEquals(SentryLevel.DEBUG, it.level)
verify(fixture.transport).send(checkEvent { event ->
assertEquals(SentryLevel.DEBUG, event.level)
})
}
}
Expand All @@ -123,8 +122,8 @@ class SentryAppenderTest {
logger.debug("testing debug level")

await.untilAsserted {
verify(fixture.transport).send(check { it: SentryEvent ->
assertEquals(SentryLevel.DEBUG, it.level)
verify(fixture.transport).send(checkEvent { event ->
assertEquals(SentryLevel.DEBUG, event.level)
})
}
}
Expand All @@ -136,8 +135,8 @@ class SentryAppenderTest {
logger.info("testing info level")

await.untilAsserted {
verify(fixture.transport).send(check { it: SentryEvent ->
assertEquals(SentryLevel.INFO, it.level)
verify(fixture.transport).send(checkEvent { event ->
assertEquals(SentryLevel.INFO, event.level)
})
}
}
Expand All @@ -149,8 +148,8 @@ class SentryAppenderTest {
logger.warn("testing warn level")

await.untilAsserted {
verify(fixture.transport).send(check { it: SentryEvent ->
assertEquals(SentryLevel.WARNING, it.level)
verify(fixture.transport).send(checkEvent { event ->
assertEquals(SentryLevel.WARNING, event.level)
})
}
}
Expand All @@ -162,8 +161,8 @@ class SentryAppenderTest {
logger.error("testing error level")

await.untilAsserted {
verify(fixture.transport).send(check { it: SentryEvent ->
assertEquals(SentryLevel.ERROR, it.level)
verify(fixture.transport).send(checkEvent { event ->
assertEquals(SentryLevel.ERROR, event.level)
})
}
}
Expand All @@ -175,8 +174,8 @@ class SentryAppenderTest {
logger.fatal("testing fatal level")

await.untilAsserted {
verify(fixture.transport).send(check { it: SentryEvent ->
assertEquals(SentryLevel.FATAL, it.level)
verify(fixture.transport).send(checkEvent { event ->
assertEquals(SentryLevel.FATAL, event.level)
})
}
}
Expand All @@ -188,8 +187,8 @@ class SentryAppenderTest {
logger.warn("testing thread information")

await.untilAsserted {
verify(fixture.transport).send(check { it: SentryEvent ->
assertNotNull(it.getExtra("thread_name"))
verify(fixture.transport).send(checkEvent { event ->
assertNotNull(event.getExtra("thread_name"))
})
}
}
Expand All @@ -202,8 +201,8 @@ class SentryAppenderTest {
logger.warn("testing MDC tags")

await.untilAsserted {
verify(fixture.transport).send(check { it: SentryEvent ->
assertEquals(mapOf("key" to "value"), it.contexts["Context Data"])
verify(fixture.transport).send(checkEvent { event ->
assertEquals(mapOf("key" to "value"), event.contexts["Context Data"])
})
}
}
Expand All @@ -215,22 +214,8 @@ class SentryAppenderTest {
logger.warn("testing without MDC tags")

await.untilAsserted {
verify(fixture.transport).send(check { it: SentryEvent ->
assertFalse(it.contexts.containsKey("MDC"))
})
}
}

@Test
fun `attaches throwable`() {
fixture.minimumEventLevel = Level.WARN
val logger = fixture.getSut()
val throwable = RuntimeException("something went wrong")
logger.warn("testing throwable", throwable)

await.untilAsserted {
verify(fixture.transport).send(check { it: SentryEvent ->
assertEquals(throwable, it.throwable)
verify(fixture.transport).send(checkEvent { event ->
assertFalse(event.contexts.containsKey("MDC"))
})
}
}
Expand All @@ -242,11 +227,11 @@ class SentryAppenderTest {
logger.info("testing sdk version")

await.untilAsserted {
verify(fixture.transport).send(check { it: SentryEvent ->
assertEquals(BuildConfig.SENTRY_LOG4J2_SDK_NAME, it.sdk.name)
assertEquals(BuildConfig.VERSION_NAME, it.sdk.version)
assertNotNull(it.sdk.packages)
assertTrue(it.sdk.packages!!.any { pkg ->
verify(fixture.transport).send(checkEvent { event ->
assertEquals(BuildConfig.SENTRY_LOG4J2_SDK_NAME, event.sdk.name)
assertEquals(BuildConfig.VERSION_NAME, event.sdk.version)
assertNotNull(event.sdk.packages)
assertTrue(event.sdk.packages!!.any { pkg ->
"maven:sentry-log4j2" == pkg.name &&
BuildConfig.VERSION_NAME == pkg.version
})
Expand All @@ -266,10 +251,10 @@ class SentryAppenderTest {
logger.warn("testing message with breadcrumbs")

await.untilAsserted {
verify(fixture.transport).send(check { it: SentryEvent ->
assertEquals(2, it.breadcrumbs.size)
val breadcrumb = it.breadcrumbs[0]
val breadcrumbTime = Instant.ofEpochMilli(it.timestamp.time)
verify(fixture.transport).send(checkEvent { event ->
assertEquals(2, event.breadcrumbs.size)
val breadcrumb = event.breadcrumbs[0]
val breadcrumbTime = Instant.ofEpochMilli(event.timestamp.time)
.atZone(ZoneId.systemDefault())
.toLocalDateTime()
assertTrue { breadcrumbTime.plusSeconds(1).isAfter(utcTime) }
Expand All @@ -292,9 +277,9 @@ class SentryAppenderTest {
logger.warn("testing message with breadcrumbs")

await.untilAsserted {
verify(fixture.transport).send(check { it: SentryEvent ->
assertEquals(1, it.breadcrumbs.size)
assertEquals("this should be a breadcrumb", it.breadcrumbs[0].message)
verify(fixture.transport).send(checkEvent { event ->
assertEquals(1, event.breadcrumbs.size)
assertEquals("this should be a breadcrumb", event.breadcrumbs[0].message)
})
}
}
Expand All @@ -309,10 +294,10 @@ class SentryAppenderTest {
logger.error("this should be sent as the event")

await.untilAsserted {
verify(fixture.transport).send(check { it: SentryEvent ->
assertEquals(2, it.breadcrumbs.size)
assertEquals("this should be a breadcrumb", it.breadcrumbs[0].message)
assertEquals("this should not be sent as the event but be a breadcrumb", it.breadcrumbs[1].message)
verify(fixture.transport).send(checkEvent { event ->
assertEquals(2, event.breadcrumbs.size)
assertEquals("this should be a breadcrumb", event.breadcrumbs[0].message)
assertEquals("this should not be sent as the event but be a breadcrumb", event.breadcrumbs[1].message)
})
}
}
Expand Down
1 change: 1 addition & 0 deletions sentry-logback/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ dependencies {
compileOnly(Config.CompileOnly.jetbrainsAnnotations)

// tests
testImplementation(project(":sentry-test-support"))
testImplementation(kotlin(Config.kotlinStdLib))
testImplementation(Config.TestLibs.kotlinTestJunit)
testImplementation(Config.TestLibs.mockitoKotlin)
Expand Down
Loading