Added log rotation utility class

This commit is contained in:
Sebastian Stenzel
2017-05-17 17:46:29 +02:00
parent 24c45c8539
commit 63df9a4d8f
2 changed files with 53 additions and 0 deletions

View File

@@ -0,0 +1,20 @@
package org.cryptomator.logging;
import java.io.File;
import java.util.concurrent.atomic.AtomicBoolean;
import ch.qos.logback.core.rolling.TriggeringPolicyBase;
/**
* Triggers a roll-over on the first log event, so each launched application instance will rotate the log.
*/
public class LaunchBasedTriggeringPolicy<E> extends TriggeringPolicyBase<E> {
private final AtomicBoolean shouldTrigger = new AtomicBoolean(true);
@Override
public boolean isTriggeringEvent(File activeFile, E event) {
return shouldTrigger.get() && shouldTrigger.getAndSet(false);
}
}

View File

@@ -0,0 +1,33 @@
package org.cryptomator.logging;
import java.io.File;
import org.junit.Assert;
import org.junit.Test;
import org.mockito.Mockito;
public class LaunchBasedTriggeringPolicyTest {
@Test
public void testTriggerOnceAndNeverAgain() {
LaunchBasedTriggeringPolicy<Object> policy = new LaunchBasedTriggeringPolicy<>();
File activeFile = Mockito.mock(File.class);
Object event = Mockito.mock(Object.class);
// 1st invocation
boolean triggered = policy.isTriggeringEvent(activeFile, event);
Assert.assertTrue(triggered);
// 2nd invocation
triggered = policy.isTriggeringEvent(activeFile, event);
Assert.assertFalse(triggered);
// 3rd invocation
triggered = policy.isTriggeringEvent(activeFile, event);
Assert.assertFalse(triggered);
Mockito.verifyZeroInteractions(activeFile);
Mockito.verifyZeroInteractions(event);
}
}