@Override public LogSampler get() { return LogSamplers.onceEvery(3); } });
@Test public void testOnceEvery() { LogSampler sampler = LogSamplers.onceEvery(10); List<Integer> accepted = new ArrayList<>(); for (int i = 0; i < 100; i++) { if (sampler.accept("", 0)) { accepted.add(i); } } Assert.assertEquals(Arrays.asList(0, 10, 20, 30, 40, 50, 60, 70, 80, 90), accepted); }
@Test public void testOnPatternPartial() { LogSampler sampler = LogSamplers.onPattern(LogSamplers.onceEvery(4), Pattern.compile("st1\\d+"), false); List<Integer> accepted = new ArrayList<>(); for (int i = 5; i < 20; i++) { if (sampler.accept("test" + i, 0)) { accepted.add(i); } } // The sampler only applies on messages test10 - test19 with limit count of 4. Assert.assertEquals(Arrays.asList(5, 6, 7, 8, 9, 10, 14, 18), accepted); }
@Test public void testOnPatternFull() { LogSampler sampler = LogSamplers.onPattern(LogSamplers.onceEvery(4), Pattern.compile("test1\\d+"), true); List<Integer> accepted = new ArrayList<>(); for (int i = 5; i < 20; i++) { if (sampler.accept("test" + i, 0)) { accepted.add(i); } } // The sampler only applies on messages test10 - test19 with limit count of 4. Assert.assertEquals(Arrays.asList(5, 6, 7, 8, 9, 10, 14, 18), accepted); }
@Test public void testOnMessages() { LogSampler sampler = LogSamplers.onMessages(LogSamplers.onceEvery(3), "test1", "test5", "test8"); List<Integer> accepted = new ArrayList<>(); for (int i = 0; i < 10; i++) { if (sampler.accept("test" + i, 0)) { accepted.add(i); } } // The sampler only applies on messages test1, test5, and test8 with limit count of 3. Assert.assertEquals(Arrays.asList(0, 1, 2, 3, 4, 6, 7, 9), accepted); }
@Test public void testAll() { LogSampler sampler = LogSamplers.all(LogSamplers.onceEvery(500), LogSamplers.limitRate(200, new TimeProvider.IncrementalTimeProvider())); List<Integer> accepted = new ArrayList<>(); for (int i = 0; i < 2000; i++) { if (sampler.accept("", 0)) { accepted.add(i); } } Assert.assertEquals(Arrays.asList(0, 1000), accepted); }
@Test public void testAny() { // A sampler that accept once every 500 count, but also accept if time passed 200 milliseconds LogSampler sampler = LogSamplers.any(LogSamplers.onceEvery(500), LogSamplers.limitRate(200, new TimeProvider.IncrementalTimeProvider())); List<Integer> accepted = new ArrayList<>(); for (int i = 0; i < 2000; i++) { if (sampler.accept("", 0)) { accepted.add(i); } } Assert.assertEquals(Arrays.asList(0, 200, 400, 500, 600, 800, 1000, 1200, 1400, 1500, 1600, 1800), accepted); }
@Test public void testSamplingLogger() throws Exception { LoggerContext loggerContext = createLoggerContext("ALL", TestAppender.class.getName()); Logger logger = Loggers.sampling(loggerContext.getLogger("LoggerTest"), LogSamplers.onceEvery(10)); for (int i = 0; i < 100; i++) { logger.info("Testing " + i); } Appender<ILoggingEvent> appender = loggerContext.getLogger(ch.qos.logback.classic.Logger.ROOT_LOGGER_NAME) .getAppender("Test"); Assert.assertTrue(appender instanceof TestAppender); List<ILoggingEvent> events = ((TestAppender) appender).getEvents(); Assert.assertEquals(10, events.size()); // Inspect the caller data, this class must be on top. for (ILoggingEvent event : events) { StackTraceElement[] callerData = event.getCallerData(); Assert.assertTrue(callerData.length > 0); Assert.assertEquals(getClass().getName(), callerData[0].getClassName()); } }
runAcceptOnLogLevels(LogSamplers.onTrace(LogSamplers.onceEvery(10)), accepted); Assert.assertEquals(Arrays.asList( 0, // TRACE runAcceptOnLogLevels(LogSamplers.onDebug(LogSamplers.onceEvery(10)), accepted); Assert.assertEquals(Arrays.asList( 0, // TRACE runAcceptOnLogLevels(LogSamplers.onInfo(LogSamplers.onceEvery(10)), accepted); Assert.assertEquals(Arrays.asList( 0, // TRACE runAcceptOnLogLevels(LogSamplers.onWarn(LogSamplers.onceEvery(10)), accepted); Assert.assertEquals(Arrays.asList( 0, // TRACE runAcceptOnLogLevels(LogSamplers.onError(LogSamplers.onceEvery(10)), accepted); Assert.assertEquals(Arrays.asList( 0, // TRACE