Skip to content

Commit

Permalink
Add support for loggin warnings to PeriodicLogger. Micro-optimize by …
Browse files Browse the repository at this point in the history
…using long instead of Long for previous logging value
  • Loading branch information
gmokki committed Mar 26, 2016
1 parent e628f35 commit b9e6e0e
Show file tree
Hide file tree
Showing 3 changed files with 29 additions and 16 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
* iteration, but want to get a log row e.g. once per minute. Not thread safe.
*/
public class PeriodicLogger {
private Long previousLogging;
private long previousLogging;
private final int periodInSeconds;
private final Logger logger;

Expand All @@ -18,12 +18,25 @@ public PeriodicLogger(Logger logger, int periodInSeconds) {
this.periodInSeconds = periodInSeconds;
}

public void log(String message, Object... parameters) {
long now = periodNumber();
if (previousLogging == null || previousLogging != now) {
public void info(String message, Object... parameters) {
if (canLog()) {
logger.info(message, parameters);
}
previousLogging = now;
}

public void warn(String message, Object... parameters) {
if (canLog()) {
logger.warn(message, parameters);
}
}

private boolean canLog() {
long currentPeriod = periodNumber();
if (previousLogging != currentPeriod) {
previousLogging = currentPeriod;
return true;
}
return false;
}

private long periodNumber() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@ public int archiveWorkflows(DateTime olderThan, int batchSize) {
double timeDiff = max(stopWatch.getTime() / 1000.0, 0.000001);
log.debug("Archived {} workflows. {} workflows / second. Workflow ids: {}. ", archivedWorkflows, archivedWorkflowsTotal
/ timeDiff, workflowIds);
periodicLogger.log("Archived {} workflows. Archiving about {} workflows / second.", archivedWorkflows,
periodicLogger.info("Archived {} workflows. Archiving about {} workflows / second.", archivedWorkflows,
archivedWorkflowsTotal / timeDiff);
} while (true);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,32 +37,32 @@ public void teardown() {

@Test
public void periodicLoggerLogsAtFirstLogCall() {
periodicLogger.log("foo {}", params);
periodicLogger.info("foo {}", params);
verify(logger, times(1)).info("foo {}", params);
verifyNoMoreInteractions(logger);
}

@Test
public void periodicLoggerDoenstLogMoreThanOneTimeInPeriod() {
periodicLogger.log("foo {}", params);
periodicLogger.log("foo {}", params);
periodicLogger.log("bar {}", params);
periodicLogger.log("baz");
periodicLogger.info("foo {}", params);
periodicLogger.warn("foo {}", params);
periodicLogger.info("bar {}", params);
periodicLogger.warn("baz");
setCurrentMillisFixed(now + 59 * 1000);
verify(logger, times(1)).info("foo {}", params);
verifyNoMoreInteractions(logger);
}

@Test
public void periodicLoggerLogsAgainWhenPeriodChanges() {
periodicLogger.log("foo1 {}", params);
periodicLogger.info("foo1 {}", params);
verify(logger, times(1)).info("foo1 {}", params);
setCurrentMillisFixed(now + 60 * 1000);
periodicLogger.log("foo2 {}", params);
periodicLogger.log("foo2 {}", params);
verify(logger, times(1)).info("foo2 {}", params);
periodicLogger.warn("foo2 {}", params);
periodicLogger.warn("foo2 {}", params);
verify(logger, times(1)).warn("foo2 {}", params);
setCurrentMillisFixed(now + 110 * 1000);
periodicLogger.log("foo3 {}", params);
periodicLogger.info("foo3 {}", params);
verifyNoMoreInteractions(logger);
}
}

0 comments on commit b9e6e0e

Please sign in to comment.