/** * Returns a {@link LogSampler} that accepts once as per the frequency. This method is equivalent to * calling {@link #limitRate(long, TimeProvider)} using {@link TimeProvider#SYSTEM_TIME} as the * {@link TimeProvider}. */ public static LogSampler limitRate(long frequency) { return limitRate(frequency, TimeProvider.SYSTEM_TIME); }
/** * Returns a {@link LogSampler} that only perform sampling if the log message matches with one of * the provided messages. This method is equivalent to calling {@link #onMessages(LogSampler, Iterable)} * by converting the array of messages to a list. */ public static LogSampler onMessages(LogSampler sampler, String...messages) { return onMessages(sampler, Arrays.asList(messages)); }
/** * Returns a {@link LogSampler} that only perform sampling if the log level is error or lower. */ public static LogSampler onError(LogSampler sampler) { return onLogLevel(sampler, LocationAwareLogger.ERROR_INT); }
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
@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 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 testExponentialLimit() { LogSampler sampler = LogSamplers.exponentialLimit(1, 1000, 2.0d); List<Integer> accepted = new ArrayList<>(); for (int i = 0; i < 3000; i++) { if (sampler.accept("", 0)) { accepted.add(i); } } Assert.assertEquals(Arrays.asList(0, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1000, 2000), accepted); }
/** * Returns a {@link LogSampler} that accepts once as per the frequency. This method is equivalent to * calling {@link #limitRate(long, TimeProvider)} using {@link TimeProvider#SYSTEM_TIME} as the * {@link TimeProvider}. */ public static LogSampler limitRate(long frequency) { return limitRate(frequency, TimeProvider.SYSTEM_TIME); }
/** * Returns a {@link LogSampler} that only perform sampling if the log level is info or lower. */ public static LogSampler onInfo(LogSampler sampler) { return onLogLevel(sampler, LocationAwareLogger.INFO_INT); }
/** * Returns a {@link LogSampler} that only perform sampling if the log message matches with one of * the provided messages. This method is equivalent to calling {@link #onMessages(LogSampler, Iterable)} * by converting the array of messages to a list. */ public static LogSampler onMessages(LogSampler sampler, String...messages) { return onMessages(sampler, Arrays.asList(messages)); }
private static final Logger LOG = LoggerFactory.getLogger(MessagingMetricsProcessorService.class); private static final Logger PROGRESS_LOG = Loggers.sampling(LOG, LogSamplers.limitRate(60000));
/** * Returns a {@link LogSampler} that only perform sampling if the log level is error or lower. */ public static LogSampler onError(LogSampler sampler) { return onLogLevel(sampler, LocationAwareLogger.ERROR_INT); }
@Test public void testLimitRate() { // Instead of sleeping, use the incremental time provider to generate monotonic increase timestamps LogSampler sampler = LogSamplers.limitRate(200, new TimeProvider.IncrementalTimeProvider()); List<Integer> accepted = new ArrayList<>(); for (int i = 0; i < 1000; i++) { if (sampler.accept("", 0)) { accepted.add(i); } } Assert.assertEquals(Arrays.asList(0, 200, 400, 600, 800), accepted); }
/** * Returns a {@link LogSampler} that only perform sampling if the log level is trace. */ public static LogSampler onTrace(LogSampler sampler) { return onLogLevel(sampler, LocationAwareLogger.TRACE_INT); }
private static final Logger LOG = LoggerFactory.getLogger(MessagingMetricsProcessorService.class); private static final Logger PROGRESS_LOG = Loggers.sampling(LOG, LogSamplers.limitRate(60000));
/** * Returns a {@link LogSampler} that only perform sampling if the log level is trace. */ public static LogSampler onTrace(LogSampler sampler) { return onLogLevel(sampler, LocationAwareLogger.TRACE_INT); }
@Test public void testConcurrentLimitRate() throws InterruptedException { final LogSampler sampler = LogSamplers.limitRate(50, new TimeProvider.IncrementalTimeProvider()); final AtomicInteger acceptedCount = new AtomicInteger();
/** * Returns a {@link LogSampler} that only perform sampling if the log level is debug or lower. */ public static LogSampler onDebug(LogSampler sampler) { return onLogLevel(sampler, LocationAwareLogger.DEBUG_INT); }
/** * Returns a {@link LogSampler} that only perform sampling if the log level is warn or lower. */ public static LogSampler onWarn(LogSampler sampler) { return onLogLevel(sampler, LocationAwareLogger.WARN_INT); }