diff --git a/main/launcher/src/main/java/org/cryptomator/logging/LaunchAndSizeBasedTriggerinPolicy.java b/main/launcher/src/main/java/org/cryptomator/logging/LaunchAndSizeBasedTriggerinPolicy.java new file mode 100644 index 000000000..3879fbdc6 --- /dev/null +++ b/main/launcher/src/main/java/org/cryptomator/logging/LaunchAndSizeBasedTriggerinPolicy.java @@ -0,0 +1,30 @@ +package org.cryptomator.logging; + +import ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy; +import ch.qos.logback.core.rolling.TriggeringPolicyBase; +import ch.qos.logback.core.util.FileSize; + +import java.io.File; + +/** + * Triggers a roll-over either on the first log event or if watched log file reaches a certain size + * + * @param Event type the policy possibly reacts to + */ +public class LaunchAndSizeBasedTriggerinPolicy extends TriggeringPolicyBase { + + LaunchBasedTriggeringPolicy launchBasedTriggeringPolicy; + SizeBasedTriggeringPolicy sizeBasedTriggeringPolicy; + + public LaunchAndSizeBasedTriggerinPolicy(FileSize threshold) { + this.launchBasedTriggeringPolicy = new LaunchBasedTriggeringPolicy<>(); + this.sizeBasedTriggeringPolicy = new SizeBasedTriggeringPolicy<>(); + sizeBasedTriggeringPolicy.setMaxFileSize(threshold); + } + + @Override + public boolean isTriggeringEvent(File activeFile, E event) { + return launchBasedTriggeringPolicy.isTriggeringEvent(activeFile, event) || sizeBasedTriggeringPolicy.isTriggeringEvent(activeFile, event); + } + +} diff --git a/main/launcher/src/main/java/org/cryptomator/logging/LoggerModule.java b/main/launcher/src/main/java/org/cryptomator/logging/LoggerModule.java index dab3a3476..ba556933e 100644 --- a/main/launcher/src/main/java/org/cryptomator/logging/LoggerModule.java +++ b/main/launcher/src/main/java/org/cryptomator/logging/LoggerModule.java @@ -9,10 +9,9 @@ import ch.qos.logback.core.Appender; import ch.qos.logback.core.ConsoleAppender; import ch.qos.logback.core.FileAppender; import ch.qos.logback.core.helpers.NOPAppender; -import ch.qos.logback.core.hook.DelayingShutdownHook; import ch.qos.logback.core.rolling.FixedWindowRollingPolicy; import ch.qos.logback.core.rolling.RollingFileAppender; -import ch.qos.logback.core.util.Duration; +import ch.qos.logback.core.util.FileSize; import dagger.Module; import dagger.Provides; import org.cryptomator.common.Environment; @@ -33,6 +32,8 @@ public class LoggerModule { private static final int LOGFILE_ROLLING_MIN = 1; private static final int LOGFILE_ROLLING_MAX = 9; private static final String LOG_PATTERN = "%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n"; + private static final String LOG_MAX_SIZE = "100mb"; + static final Map DEFAULT_LOG_LEVELS = Map.of( // Logger.ROOT_LOGGER_NAME, Level.INFO, // "org.cryptomator", Level.INFO // @@ -84,7 +85,7 @@ public class LoggerModule { appender.setContext(context); appender.setFile(logDir.resolve(LOGFILE_NAME).toString()); appender.setEncoder(encoder); - LaunchBasedTriggeringPolicy triggeringPolicy = new LaunchBasedTriggeringPolicy(); + LaunchAndSizeBasedTriggerinPolicy triggeringPolicy = new LaunchAndSizeBasedTriggerinPolicy(FileSize.valueOf(LOG_MAX_SIZE)); triggeringPolicy.setContext(context); triggeringPolicy.start(); appender.setTriggeringPolicy(triggeringPolicy);