From 63df9a4d8fd4602907b0a6524683ddf8d8aa6ecf Mon Sep 17 00:00:00 2001 From: Sebastian Stenzel Date: Wed, 17 May 2017 17:46:29 +0200 Subject: [PATCH] Added log rotation utility class --- .../logging/LaunchBasedTriggeringPolicy.java | 20 +++++++++++ .../LaunchBasedTriggeringPolicyTest.java | 33 +++++++++++++++++++ 2 files changed, 53 insertions(+) create mode 100644 main/launcher/src/main/java/org/cryptomator/logging/LaunchBasedTriggeringPolicy.java create mode 100644 main/launcher/src/test/java/org/cryptomator/logging/LaunchBasedTriggeringPolicyTest.java diff --git a/main/launcher/src/main/java/org/cryptomator/logging/LaunchBasedTriggeringPolicy.java b/main/launcher/src/main/java/org/cryptomator/logging/LaunchBasedTriggeringPolicy.java new file mode 100644 index 000000000..a04feebd7 --- /dev/null +++ b/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 extends TriggeringPolicyBase { + + private final AtomicBoolean shouldTrigger = new AtomicBoolean(true); + + @Override + public boolean isTriggeringEvent(File activeFile, E event) { + return shouldTrigger.get() && shouldTrigger.getAndSet(false); + } + +} diff --git a/main/launcher/src/test/java/org/cryptomator/logging/LaunchBasedTriggeringPolicyTest.java b/main/launcher/src/test/java/org/cryptomator/logging/LaunchBasedTriggeringPolicyTest.java new file mode 100644 index 000000000..8dd3da4ce --- /dev/null +++ b/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 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); + } + +}