package org.springside.modules.utils.log;
import static org.assertj.core.api.Assertions.*;
import java.util.concurrent.TimeUnit;
import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springside.modules.test.log.LogbackListAppender;
import org.springside.modules.utils.time.ClockUtil;
import org.springside.modules.utils.time.ClockUtil.DummyClock;
public class ThrottledSlf4jLoggerTest {
@Test
public void test() {
try {
DummyClock clock = ClockUtil.useDummyClock();
Logger realLogger = LoggerFactory.getLogger(ThrottledSlf4jLoggerTest.class);
LogbackListAppender appender = LogbackListAppender.create(ThrottledSlf4jLoggerTest.class);
// 间隔10毫秒
ThrottledSlf4jLogger logger = new ThrottledSlf4jLogger(realLogger, 10, TimeUnit.MILLISECONDS);
logger.warn("haha");
assertThat(appender.getLogsCount()).isEqualTo(1);
// still 1
logger.warn("haha {}", 1);
assertThat(appender.getLogsCount()).isEqualTo(1);
// still 1
logger.error("haha {}", 1);
assertThat(appender.getLogsCount()).isEqualTo(1);
// still 1
clock.increaseTime(5);
logger.error("haha, {} {} {}", 1, 2, 3);
assertThat(appender.getLogsCount()).isEqualTo(1);
// 10ms pass
clock.increaseTime(5);
logger.warn("haha");
assertThat(appender.getLogsCount()).isEqualTo(2);
// still 2
logger.warn("haha {} {} {}", 1, 2, 3);
assertThat(appender.getLogsCount()).isEqualTo(2);
// still 2
clock.increaseTime(7);
logger.warn("haha");
assertThat(appender.getLogsCount()).isEqualTo(2);
} finally {
ClockUtil.useDefaultClock();
}
}
}