Browse Source

Added log rotation utility class

Sebastian Stenzel 8 years ago
parent
commit
63df9a4d8f

+ 20 - 0
main/launcher/src/main/java/org/cryptomator/logging/LaunchBasedTriggeringPolicy.java

@@ -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);
+	}
+
+}

+ 33 - 0
main/launcher/src/test/java/org/cryptomator/logging/LaunchBasedTriggeringPolicyTest.java

@@ -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);
+	}
+
+}