diff --git a/sdk/common/src/main/java/io/opentelemetry/sdk/internal/ThrottlingLogger.java b/sdk/common/src/main/java/io/opentelemetry/sdk/internal/ThrottlingLogger.java index d4bd64d1af..e2c671cdff 100644 --- a/sdk/common/src/main/java/io/opentelemetry/sdk/internal/ThrottlingLogger.java +++ b/sdk/common/src/main/java/io/opentelemetry/sdk/internal/ThrottlingLogger.java @@ -41,7 +41,8 @@ public class ThrottlingLogger { this.fastRateLimiter = new RateLimiter(RATE_LIMIT / rateTimeUnit.toSeconds(1), RATE_LIMIT, clock); this.throttledRateLimiter = - new RateLimiter(RATE_LIMIT / rateTimeUnit.toSeconds(1), THROTTLED_RATE_LIMIT, clock); + new RateLimiter( + THROTTLED_RATE_LIMIT / rateTimeUnit.toSeconds(1), THROTTLED_RATE_LIMIT, clock); } /** Log a message at the given level. */ diff --git a/sdk/common/src/test/java/io/opentelemetry/sdk/internal/ThrottlingLoggerTest.java b/sdk/common/src/test/java/io/opentelemetry/sdk/internal/ThrottlingLoggerTest.java index 1c35b23ba0..624c0fc5fe 100644 --- a/sdk/common/src/test/java/io/opentelemetry/sdk/internal/ThrottlingLoggerTest.java +++ b/sdk/common/src/test/java/io/opentelemetry/sdk/internal/ThrottlingLoggerTest.java @@ -144,4 +144,41 @@ class ThrottlingLoggerTest { assertThat(logs.getEvents()).hasSize(9); assertThat(logs.getEvents().get(8).getMessage()).isEqualTo("oh no!"); } + + @Test + void allowOnlyOneLogPerMinuteAfterSuppression() { + TestClock clock = TestClock.create(); + ThrottlingLogger logger = new ThrottlingLogger(realLogger, clock); + + logger.log(Level.WARNING, "oh no!"); + logger.log(Level.WARNING, "oh no!"); + logger.log(Level.WARNING, "oh no!"); + logger.log(Level.WARNING, "oh no!"); + logger.log(Level.WARNING, "oh no!"); + + logger.log(Level.WARNING, "oh no I should trigger suppression!"); + logger.log(Level.WARNING, "oh no I should be suppressed!"); + + assertThat(logs.getEvents()).hasSize(7); + + clock.advance(Duration.ofMillis(12_001)); + logger.log(Level.WARNING, "suppression 1"); + clock.advance(Duration.ofMillis(12_001)); + logger.log(Level.WARNING, "suppression 2"); + clock.advance(Duration.ofMillis(12_001)); + logger.log(Level.WARNING, "suppression 3"); + clock.advance(Duration.ofMillis(12_001)); + logger.log(Level.WARNING, "suppression 4"); + clock.advance(Duration.ofMillis(12_001)); + logger.log(Level.WARNING, "allowed 1"); + + logs.assertDoesNotContain("suppression 1"); + logs.assertDoesNotContain("suppression 2"); + logs.assertDoesNotContain("suppression 3"); + logs.assertDoesNotContain("suppression 4"); + logs.assertContains("allowed 1"); + + assertThat(logs.getEvents()).hasSize(8); + assertThat(logs.getEvents().get(7).getMessage()).isEqualTo("allowed 1"); + } }