Skip to content

Commit 7918934

Browse files
committed
chore(stack): Merge preceding stack changes
2 parents 81e86e1 + 2bf0043 commit 7918934

4 files changed

Lines changed: 114 additions & 0 deletions

File tree

‎sentry-spring-boot-4/src/main/java/io/sentry/spring/boot4/SentryLog4j2Initializer.java‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,7 @@ public void onApplicationEvent(final @NotNull ApplicationEvent event) {
9595
toLog4jLevel(sentryProperties.getLogging().getMinimumBreadcrumbLevel()),
9696
toLog4jLevel(sentryProperties.getLogging().getMinimumEventLevel()),
9797
toLog4jLevel(sentryProperties.getLogging().getMinimumLevel()),
98+
sentryProperties.getLogging().isEnableLogs(),
9899
null,
99100
null,
100101
ScopesAdapter.getInstance(),

‎sentry-spring-boot-4/src/test/kotlin/io/sentry/spring/boot4/SentryLog4j2AppenderAutoConfigurationTest.kt‎

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,10 @@ import ch.qos.logback.core.read.ListAppender
66
import io.sentry.ITransportFactory
77
import io.sentry.NoOpTransportFactory
88
import io.sentry.ScopesAdapter
9+
import io.sentry.Sentry
10+
import io.sentry.checkLogs
911
import io.sentry.log4j2.SentryAppender
12+
import io.sentry.transport.ITransport
1013
import kotlin.test.AfterTest
1114
import kotlin.test.BeforeTest
1215
import kotlin.test.Test
@@ -17,6 +20,11 @@ import org.apache.logging.log4j.core.LoggerContext
1720
import org.apache.logging.log4j.core.config.DefaultConfiguration
1821
import org.apache.logging.log4j.core.config.LoggerConfig
1922
import org.assertj.core.api.Assertions.assertThat
23+
import org.mockito.kotlin.any
24+
import org.mockito.kotlin.mock
25+
import org.mockito.kotlin.never
26+
import org.mockito.kotlin.verify
27+
import org.mockito.kotlin.whenever
2028
import org.slf4j.LoggerFactory
2129
import org.springframework.boot.autoconfigure.AutoConfigurations
2230
import org.springframework.boot.test.context.FilteredClassLoader
@@ -63,6 +71,16 @@ class SentryLog4j2AppenderAutoConfigurationTest {
6371

6472
private val dsnEnabledRunner = dsnOnlyRunner.withPropertyValues("sentry.logging.enabled=true")
6573

74+
private val logsRunner =
75+
baseContextRunner
76+
.withLog4j2CoreProvider()
77+
.withPropertyValues(
78+
"sentry.dsn=http://key@localhost/proj",
79+
"sentry.logging.enabled=true",
80+
"sentry.logs.enabled=true",
81+
)
82+
.withUserConfiguration(MockTransportConfiguration::class.java)
83+
6684
// Hide the Log4j2 Core provider so LogManager uses the Log4j-to-SLF4J bridge.
6785
private val log4j2BridgeDsnEnabledRunner =
6886
baseContextRunner
@@ -181,6 +199,29 @@ class SentryLog4j2AppenderAutoConfigurationTest {
181199
}
182200
}
183201

202+
@Test
203+
fun `forwards Sentry Logs when enabled`() {
204+
logsRunner.withPropertyValues("sentry.logging.enable-logs=true").run {
205+
LogManager.getLogger("io.sentry.spring.boot4.logs-enabled").error("enabled log")
206+
Sentry.flush(1000)
207+
208+
val transport = it.getBean(ITransport::class.java)
209+
verify(transport)
210+
.send(checkLogs { logs -> assertThat(logs.items.single().body).isEqualTo("enabled log") })
211+
}
212+
}
213+
214+
@Test
215+
fun `does not forward Sentry Logs by default`() {
216+
logsRunner.run {
217+
LogManager.getLogger("io.sentry.spring.boot4.logs-disabled").error("disabled log")
218+
Sentry.flush(1000)
219+
220+
val transport = it.getBean(ITransport::class.java)
221+
verify(transport, never()).send(checkLogs {})
222+
}
223+
}
224+
184225
@Test
185226
fun `does not configure SentryAppender when logging is disabled`() {
186227
dsnEnabledRunner.withPropertyValues("sentry.logging.enabled=false").run {
@@ -251,6 +292,21 @@ class SentryLog4j2AppenderAutoConfigurationTest {
251292
.run { assertThat(rootLogger.getAppenders(SentryAppender::class.java)).isEmpty() }
252293
}
253294

295+
@Configuration(proxyBeanMethods = false)
296+
open class MockTransportConfiguration {
297+
298+
private val transport = mock<ITransport>()
299+
300+
@Bean
301+
open fun mockTransportFactory(): ITransportFactory {
302+
val factory = mock<ITransportFactory>()
303+
whenever(factory.create(any(), any())).thenReturn(transport)
304+
return factory
305+
}
306+
307+
@Bean open fun sentryTransport() = transport
308+
}
309+
254310
@Configuration(proxyBeanMethods = false)
255311
open class NoOpTransportConfiguration {
256312

‎sentry-spring-boot-jakarta/src/main/java/io/sentry/spring/boot/jakarta/SentryLog4j2Initializer.java‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,7 @@ public void onApplicationEvent(final @NotNull ApplicationEvent event) {
9595
toLog4jLevel(sentryProperties.getLogging().getMinimumBreadcrumbLevel()),
9696
toLog4jLevel(sentryProperties.getLogging().getMinimumEventLevel()),
9797
toLog4jLevel(sentryProperties.getLogging().getMinimumLevel()),
98+
sentryProperties.getLogging().isEnableLogs(),
9899
null,
99100
null,
100101
ScopesAdapter.getInstance(),

‎sentry-spring-boot-jakarta/src/test/kotlin/io/sentry/spring/boot/jakarta/SentryLog4j2AppenderAutoConfigurationTest.kt‎

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,10 @@ import ch.qos.logback.core.read.ListAppender
66
import io.sentry.ITransportFactory
77
import io.sentry.NoOpTransportFactory
88
import io.sentry.ScopesAdapter
9+
import io.sentry.Sentry
10+
import io.sentry.checkLogs
911
import io.sentry.log4j2.SentryAppender
12+
import io.sentry.transport.ITransport
1013
import kotlin.test.AfterTest
1114
import kotlin.test.BeforeTest
1215
import kotlin.test.Test
@@ -17,6 +20,11 @@ import org.apache.logging.log4j.core.LoggerContext
1720
import org.apache.logging.log4j.core.config.DefaultConfiguration
1821
import org.apache.logging.log4j.core.config.LoggerConfig
1922
import org.assertj.core.api.Assertions.assertThat
23+
import org.mockito.kotlin.any
24+
import org.mockito.kotlin.mock
25+
import org.mockito.kotlin.never
26+
import org.mockito.kotlin.verify
27+
import org.mockito.kotlin.whenever
2028
import org.slf4j.LoggerFactory
2129
import org.springframework.boot.autoconfigure.AutoConfigurations
2230
import org.springframework.boot.test.context.FilteredClassLoader
@@ -63,6 +71,16 @@ class SentryLog4j2AppenderAutoConfigurationTest {
6371

6472
private val dsnEnabledRunner = dsnOnlyRunner.withPropertyValues("sentry.logging.enabled=true")
6573

74+
private val logsRunner =
75+
baseContextRunner
76+
.withLog4j2CoreProvider()
77+
.withPropertyValues(
78+
"sentry.dsn=http://key@localhost/proj",
79+
"sentry.logging.enabled=true",
80+
"sentry.logs.enabled=true",
81+
)
82+
.withUserConfiguration(MockTransportConfiguration::class.java)
83+
6684
// Hide the Log4j2 Core provider so LogManager uses the Log4j-to-SLF4J bridge.
6785
private val log4j2BridgeDsnEnabledRunner =
6886
baseContextRunner
@@ -181,6 +199,29 @@ class SentryLog4j2AppenderAutoConfigurationTest {
181199
}
182200
}
183201

202+
@Test
203+
fun `forwards Sentry Logs when enabled`() {
204+
logsRunner.withPropertyValues("sentry.logging.enable-logs=true").run {
205+
LogManager.getLogger("io.sentry.spring.boot.jakarta.logs-enabled").error("enabled log")
206+
Sentry.flush(1000)
207+
208+
val transport = it.getBean(ITransport::class.java)
209+
verify(transport)
210+
.send(checkLogs { logs -> assertThat(logs.items.single().body).isEqualTo("enabled log") })
211+
}
212+
}
213+
214+
@Test
215+
fun `does not forward Sentry Logs by default`() {
216+
logsRunner.run {
217+
LogManager.getLogger("io.sentry.spring.boot.jakarta.logs-disabled").error("disabled log")
218+
Sentry.flush(1000)
219+
220+
val transport = it.getBean(ITransport::class.java)
221+
verify(transport, never()).send(checkLogs {})
222+
}
223+
}
224+
184225
@Test
185226
fun `does not configure SentryAppender when logging is disabled`() {
186227
dsnEnabledRunner.withPropertyValues("sentry.logging.enabled=false").run {
@@ -251,6 +292,21 @@ class SentryLog4j2AppenderAutoConfigurationTest {
251292
.run { assertThat(rootLogger.getAppenders(SentryAppender::class.java)).isEmpty() }
252293
}
253294

295+
@Configuration(proxyBeanMethods = false)
296+
open class MockTransportConfiguration {
297+
298+
private val transport = mock<ITransport>()
299+
300+
@Bean
301+
open fun mockTransportFactory(): ITransportFactory {
302+
val factory = mock<ITransportFactory>()
303+
whenever(factory.create(any(), any())).thenReturn(transport)
304+
return factory
305+
}
306+
307+
@Bean open fun sentryTransport() = transport
308+
}
309+
254310
@Configuration(proxyBeanMethods = false)
255311
open class NoOpTransportConfiguration {
256312

0 commit comments

Comments
 (0)