diff --git a/pom.xml b/pom.xml index e9f55bd0b..d6c0f0340 100644 --- a/pom.xml +++ b/pom.xml @@ -46,8 +46,8 @@ 18.0.1 4.0.0 9.23 - 1.2.11 - 1.7.36 + 1.3.0-beta0 + 2.0.0-beta1 0.5.1 1.7.0 diff --git a/src/main/java/module-info.java b/src/main/java/module-info.java index de9647138..82fdc7335 100644 --- a/src/main/java/module-info.java +++ b/src/main/java/module-info.java @@ -1,7 +1,9 @@ +import ch.qos.logback.classic.spi.Configurator; import org.cryptomator.integrations.tray.TrayMenuController; +import org.cryptomator.logging.LogbackConfiguratorFactory; import org.cryptomator.ui.traymenu.AwtTrayMenuController; -module org.cryptomator.desktop { +open module org.cryptomator.desktop { requires static org.jetbrains.annotations; requires org.cryptomator.cryptolib; @@ -20,6 +22,8 @@ module org.cryptomator.desktop { requires javafx.fxml; requires jdk.crypto.ec; // 3rd party: + requires ch.qos.logback.classic; + requires ch.qos.logback.core; requires com.auth0.jwt; requires com.google.common; requires com.google.gson; @@ -32,39 +36,11 @@ module org.cryptomator.desktop { /* TODO: filename-based modules: */ requires static javax.inject; /* ugly dagger/guava crap */ - requires logback.classic; - requires logback.core; requires com.nimbusds.jose.jwt; exports org.cryptomator.ui.traymenu to org.cryptomator.integrations.api; provides TrayMenuController with AwtTrayMenuController; + provides Configurator with LogbackConfiguratorFactory; exports org.cryptomator.ui.keyloading.hub to com.fasterxml.jackson.databind; - - opens org.cryptomator.common.settings to com.google.gson; - opens org.cryptomator.ui.keyloading.hub to com.google.gson, javafx.fxml; - - opens org.cryptomator.launcher to javafx.graphics; - - opens org.cryptomator.common to javafx.fxml; - opens org.cryptomator.common.vaults to javafx.fxml; - opens org.cryptomator.ui.addvaultwizard to javafx.fxml; - opens org.cryptomator.ui.changepassword to javafx.fxml; - opens org.cryptomator.ui.common to javafx.fxml; - opens org.cryptomator.ui.controls to javafx.fxml; - opens org.cryptomator.ui.forgetPassword to javafx.fxml; - opens org.cryptomator.ui.fxapp to javafx.fxml; - opens org.cryptomator.ui.health to javafx.fxml; - opens org.cryptomator.ui.keyloading.masterkeyfile to javafx.fxml; - opens org.cryptomator.ui.lock to javafx.fxml; - opens org.cryptomator.ui.mainwindow to javafx.fxml; - opens org.cryptomator.ui.migration to javafx.fxml; - opens org.cryptomator.ui.preferences to javafx.fxml; - opens org.cryptomator.ui.quit to javafx.fxml; - opens org.cryptomator.ui.recoverykey to javafx.fxml; - opens org.cryptomator.ui.removevault to javafx.fxml; - opens org.cryptomator.ui.stats to javafx.fxml; - opens org.cryptomator.ui.unlock to javafx.fxml; - opens org.cryptomator.ui.vaultoptions to javafx.fxml; - opens org.cryptomator.ui.wrongfilealert to javafx.fxml; } \ No newline at end of file diff --git a/src/main/java/org/cryptomator/common/CommonsModule.java b/src/main/java/org/cryptomator/common/CommonsModule.java index edb4f063b..101dc1e28 100644 --- a/src/main/java/org/cryptomator/common/CommonsModule.java +++ b/src/main/java/org/cryptomator/common/CommonsModule.java @@ -41,6 +41,12 @@ public abstract class CommonsModule { private static final int NUM_CORE_BG_THREADS = 6; private static final long BG_THREAD_KEEPALIVE_SECONDS = 60l; + @Provides + @Singleton + static Environment provideEnvironment() { + return Environment.getInstance(); + } + @SuppressWarnings("SpellCheckingInspection") @Provides @Singleton diff --git a/src/main/java/org/cryptomator/common/Environment.java b/src/main/java/org/cryptomator/common/Environment.java index 14fbe7376..261750ad1 100644 --- a/src/main/java/org/cryptomator/common/Environment.java +++ b/src/main/java/org/cryptomator/common/Environment.java @@ -5,8 +5,6 @@ import com.google.common.base.Strings; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import javax.inject.Inject; -import javax.inject.Singleton; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; @@ -17,7 +15,6 @@ import java.util.function.Predicate; import java.util.stream.Stream; import java.util.stream.StreamSupport; -@Singleton public class Environment { private static final Logger LOG = LoggerFactory.getLogger(Environment.class); @@ -36,13 +33,14 @@ public class Environment { private static final String PLUGIN_DIR_PROP_NAME = "cryptomator.pluginDir"; private static final String TRAY_ICON_PROP_NAME = "cryptomator.showTrayIcon"; - @Inject - public Environment() { - LOG.debug("user.home: {}", System.getProperty("user.home")); - LOG.debug("java.library.path: {}", System.getProperty("java.library.path")); - LOG.debug("user.language: {}", System.getProperty("user.language")); - LOG.debug("user.region: {}", System.getProperty("user.region")); - LOG.debug("logback.configurationFile: {}", System.getProperty("logback.configurationFile")); + private Environment() {} + + public void log() { + LOG.info("user.home: {}", System.getProperty("user.home")); + LOG.info("java.library.path: {}", System.getProperty("java.library.path")); + LOG.info("user.language: {}", System.getProperty("user.language")); + LOG.info("user.region: {}", System.getProperty("user.region")); + LOG.info("logback.configurationFile: {}", System.getProperty("logback.configurationFile")); logCryptomatorSystemProperty(SETTINGS_PATH_PROP_NAME); logCryptomatorSystemProperty(IPC_SOCKET_PATH_PROP_NAME); logCryptomatorSystemProperty(KEYCHAIN_PATHS_PROP_NAME); @@ -56,8 +54,16 @@ public class Environment { logCryptomatorSystemProperty(P12_PATH_PROP_NAME); } + public static Environment getInstance() { + final class Holder { + + private static final Environment INSTANCE = new Environment(); + } + return Holder.INSTANCE; + } + private void logCryptomatorSystemProperty(String propertyName) { - LOG.debug("{}: {}", propertyName, System.getProperty(propertyName)); + LOG.info("{}: {}", propertyName, System.getProperty(propertyName)); } public boolean useCustomLogbackConfig() { @@ -94,6 +100,7 @@ public class Environment { /** * Returns the app version defined in the {@value APP_VERSION_PROP_NAME} property or returns "SNAPSHOT". + * * @return App version or "SNAPSHOT", if undefined */ public String getAppVersion() { diff --git a/src/main/java/org/cryptomator/launcher/Cryptomator.java b/src/main/java/org/cryptomator/launcher/Cryptomator.java index 08fb13185..2b066c730 100644 --- a/src/main/java/org/cryptomator/launcher/Cryptomator.java +++ b/src/main/java/org/cryptomator/launcher/Cryptomator.java @@ -12,7 +12,6 @@ import org.cryptomator.common.Environment; import org.cryptomator.common.ShutdownHook; import org.cryptomator.ipc.IpcCommunicator; import org.cryptomator.logging.DebugMode; -import org.cryptomator.logging.LoggerConfiguration; import org.cryptomator.ui.fxapp.FxApplicationComponent; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -35,7 +34,6 @@ public class Cryptomator { private static final CryptomatorComponent CRYPTOMATOR_COMPONENT = DaggerCryptomatorComponent.factory().create(STARTUP_TIME); private static final Logger LOG = LoggerFactory.getLogger(Cryptomator.class); - private final LoggerConfiguration logConfig; private final DebugMode debugMode; private final SupportedLanguages supportedLanguages; private final Environment env; @@ -43,8 +41,7 @@ public class Cryptomator { private final ShutdownHook shutdownHook; @Inject - Cryptomator(LoggerConfiguration logConfig, DebugMode debugMode, SupportedLanguages supportedLanguages, Environment env, Lazy ipcMessageHandler, ShutdownHook shutdownHook) { - this.logConfig = logConfig; + Cryptomator(DebugMode debugMode, SupportedLanguages supportedLanguages, Environment env, Lazy ipcMessageHandler, ShutdownHook shutdownHook) { this.debugMode = debugMode; this.supportedLanguages = supportedLanguages; this.env = env; @@ -79,7 +76,7 @@ public class Cryptomator { * @return Nonzero exit code in case of an error. */ private int run(String[] args) { - logConfig.init(); + env.log(); LOG.debug("Dagger graph initialized after {}ms", System.currentTimeMillis() - STARTUP_TIME); LOG.info("Starting Cryptomator {} on {} {} ({})", env.getAppVersion(), SystemUtils.OS_NAME, SystemUtils.OS_VERSION, SystemUtils.OS_ARCH); debugMode.initialize(); diff --git a/src/main/java/org/cryptomator/launcher/CryptomatorComponent.java b/src/main/java/org/cryptomator/launcher/CryptomatorComponent.java index 8c6443717..72b8af80c 100644 --- a/src/main/java/org/cryptomator/launcher/CryptomatorComponent.java +++ b/src/main/java/org/cryptomator/launcher/CryptomatorComponent.java @@ -3,14 +3,13 @@ package org.cryptomator.launcher; import dagger.BindsInstance; import dagger.Component; import org.cryptomator.common.CommonsModule; -import org.cryptomator.logging.LoggerModule; import org.cryptomator.ui.fxapp.FxApplicationComponent; import javax.inject.Named; import javax.inject.Singleton; @Singleton -@Component(modules = {CryptomatorModule.class, CommonsModule.class, LoggerModule.class}) +@Component(modules = {CryptomatorModule.class, CommonsModule.class}) public interface CryptomatorComponent { Cryptomator application(); diff --git a/src/main/java/org/cryptomator/logging/DebugMode.java b/src/main/java/org/cryptomator/logging/DebugMode.java index c15fb466b..386b0fd43 100644 --- a/src/main/java/org/cryptomator/logging/DebugMode.java +++ b/src/main/java/org/cryptomator/logging/DebugMode.java @@ -5,29 +5,24 @@ *******************************************************************************/ package org.cryptomator.logging; -import ch.qos.logback.classic.Level; -import ch.qos.logback.classic.Logger; -import ch.qos.logback.classic.LoggerContext; import org.cryptomator.common.settings.Settings; +import org.slf4j.Logger; import org.slf4j.LoggerFactory; import javax.inject.Inject; import javax.inject.Singleton; import javafx.beans.value.ObservableValue; -import java.util.Map; @Singleton public class DebugMode { - private static final org.slf4j.Logger LOG = LoggerFactory.getLogger(DebugMode.class); + private static final Logger LOG = LoggerFactory.getLogger(DebugMode.class); private final Settings settings; - private final LoggerContext context; @Inject - public DebugMode(Settings settings, LoggerContext context) { + public DebugMode(Settings settings) { this.settings = settings; - this.context = context; } public void initialize() { @@ -40,19 +35,13 @@ public class DebugMode { } private void setLogLevels(boolean debugMode) { + var configurator = LogbackConfiguratorFactory.provider(); if (debugMode) { - setLogLevels(LoggerModule.DEBUG_LOG_LEVELS); + configurator.setLogLevels(LogbackConfigurator.DEBUG_LOG_LEVELS); LOG.debug("Debug mode enabled"); } else { LOG.debug("Debug mode disabled"); - setLogLevels(LoggerModule.DEFAULT_LOG_LEVELS); - } - } - - private void setLogLevels(Map logLevels) { - for (Map.Entry loglevel : logLevels.entrySet()) { - Logger logger = context.getLogger(loglevel.getKey()); - logger.setLevel(loglevel.getValue()); + configurator.setLogLevels(LogbackConfigurator.DEFAULT_LOG_LEVELS); } } diff --git a/src/main/java/org/cryptomator/logging/LogbackConfigurator.java b/src/main/java/org/cryptomator/logging/LogbackConfigurator.java new file mode 100644 index 000000000..e242d08ff --- /dev/null +++ b/src/main/java/org/cryptomator/logging/LogbackConfigurator.java @@ -0,0 +1,144 @@ +package org.cryptomator.logging; + +import ch.qos.logback.classic.Level; +import ch.qos.logback.classic.Logger; +import ch.qos.logback.classic.LoggerContext; +import ch.qos.logback.classic.encoder.PatternLayoutEncoder; +import ch.qos.logback.classic.spi.Configurator; +import ch.qos.logback.classic.spi.ILoggingEvent; +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.rolling.FixedWindowRollingPolicy; +import ch.qos.logback.core.rolling.RollingFileAppender; +import ch.qos.logback.core.spi.ContextAwareBase; +import ch.qos.logback.core.util.FileSize; +import org.cryptomator.common.Environment; + +import java.nio.file.Path; +import java.util.Map; + +public class LogbackConfigurator extends ContextAwareBase implements Configurator { + + private static final String LOG_PATTERN = "%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n"; + private static final String UPGRADE_FILENAME = "upgrade.log"; + private static final String LOGFILE_NAME = "cryptomator0.log"; + private static final String LOGFILE_ROLLING_PATTERN = "cryptomator%i.log"; + private static final int LOGFILE_ROLLING_MIN = 1; + private static final int LOGFILE_ROLLING_MAX = 9; + 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 // + ); + static final Map DEBUG_LOG_LEVELS = Map.of( // + Logger.ROOT_LOGGER_NAME, Level.INFO, // + "org.cryptomator", Level.TRACE // + ); + + LogbackConfigurator() {} + + /** + * Adjust the log levels + * + * @param logLevels new log levels to use + */ + void setLogLevels(Map logLevels) { + if (context instanceof LoggerContext lc) { + for (var loglevel : logLevels.entrySet()) { + Logger logger = lc.getLogger(loglevel.getKey()); + logger.setLevel(loglevel.getValue()); + } + } + } + + @Override + public void configure(LoggerContext context) { + var useCustomCfg = Environment.getInstance().useCustomLogbackConfig(); + var logDir = Environment.getInstance().getLogDir().orElse(null); + + if (useCustomCfg) { + addInfo("Using external logback configuration file."); + } else { + // configure appenders: + var stdout = stdOutAppender(context); + var noop = noopAppender(context); + var file = logDir == null ? noop : fileAppender(context, logDir); + var upgrade = logDir == null ? noop : upgradeAppender(context, logDir); + + // configure loggers: + for (var loglevel : DEFAULT_LOG_LEVELS.entrySet()) { + Logger logger = context.getLogger(loglevel.getKey()); + logger.setLevel(loglevel.getValue()); + logger.setAdditive(false); + logger.addAppender(stdout); + logger.addAppender(file); + } + + // configure upgrade logger: + Logger upgrades = context.getLogger("org.cryptomator.cryptofs.migration"); + upgrades.setLevel(Level.DEBUG); + upgrades.addAppender(stdout); + upgrades.addAppender(upgrade); + upgrades.addAppender(file); + upgrades.setAdditive(false); + } + } + + private Appender noopAppender(LoggerContext context) { + var appender = new NOPAppender(); + appender.setContext(context); + return appender; + } + + private Appender stdOutAppender(LoggerContext context) { + var appender = new ConsoleAppender(); + appender.setContext(context); + appender.setName("STDOUT"); + appender.setEncoder(encoder(context)); + appender.start(); + return appender; + } + + private Appender upgradeAppender(LoggerContext context, Path logDir) { + var appender = new FileAppender(); + appender.setContext(context); + appender.setName("UPGRADE"); + appender.setFile(logDir.resolve(UPGRADE_FILENAME).toString()); + appender.setEncoder(encoder(context)); + appender.start(); + return appender; + } + + private Appender fileAppender(LoggerContext context, Path logDir) { + var appender = new RollingFileAppender(); + appender.setContext(context); + appender.setName("FILE"); + appender.setFile(logDir.resolve(LOGFILE_NAME).toString()); + appender.setEncoder(encoder(context)); + var triggeringPolicy = new LaunchAndSizeBasedTriggeringPolicy(FileSize.valueOf(LOG_MAX_SIZE)); + triggeringPolicy.setContext(context); + triggeringPolicy.start(); + appender.setTriggeringPolicy(triggeringPolicy); + var rollingPolicy = new FixedWindowRollingPolicy(); + rollingPolicy.setContext(context); + rollingPolicy.setFileNamePattern(logDir.resolve(LOGFILE_ROLLING_PATTERN).toString()); + rollingPolicy.setMinIndex(LOGFILE_ROLLING_MIN); + rollingPolicy.setMaxIndex(LOGFILE_ROLLING_MAX); + rollingPolicy.setParent(appender); + rollingPolicy.start(); + appender.setRollingPolicy(rollingPolicy); + appender.start(); + return appender; + } + + private PatternLayoutEncoder encoder(LoggerContext context) { + var encoder = new PatternLayoutEncoder(); + encoder.setContext(context); + encoder.setPattern(LOG_PATTERN); + encoder.start(); + return encoder; + } +} diff --git a/src/main/java/org/cryptomator/logging/LogbackConfiguratorFactory.java b/src/main/java/org/cryptomator/logging/LogbackConfiguratorFactory.java new file mode 100644 index 000000000..1d796891f --- /dev/null +++ b/src/main/java/org/cryptomator/logging/LogbackConfiguratorFactory.java @@ -0,0 +1,12 @@ +package org.cryptomator.logging; + +public class LogbackConfiguratorFactory { + + public static LogbackConfigurator provider() { + final class Holder { + private static final LogbackConfigurator INSTANCE = new LogbackConfigurator(); + } + return Holder.INSTANCE; + } + +} diff --git a/src/main/java/org/cryptomator/logging/LoggerConfiguration.java b/src/main/java/org/cryptomator/logging/LoggerConfiguration.java deleted file mode 100644 index 3d8cc9216..000000000 --- a/src/main/java/org/cryptomator/logging/LoggerConfiguration.java +++ /dev/null @@ -1,70 +0,0 @@ -package org.cryptomator.logging; - -import ch.qos.logback.classic.Level; -import ch.qos.logback.classic.Logger; -import ch.qos.logback.classic.LoggerContext; -import ch.qos.logback.classic.spi.ILoggingEvent; -import ch.qos.logback.core.Appender; -import org.cryptomator.common.Environment; -import org.cryptomator.common.ShutdownHook; - -import javax.inject.Inject; -import javax.inject.Named; -import javax.inject.Singleton; -import java.util.Map; - -@Singleton -public class LoggerConfiguration { - - private final LoggerContext context; - private final Environment environment; - private final Appender stdout; - private final Appender upgrade; - private final Appender file; - private final ShutdownHook shutdownHook; - - @Inject - LoggerConfiguration(LoggerContext context, // - Environment environment, // - @Named("stdoutAppender") Appender stdout, // - @Named("upgradeAppender") Appender upgrade, // - @Named("fileAppender") Appender file, // - ShutdownHook shutdownHook) { - this.context = context; - this.environment = environment; - this.stdout = stdout; - this.upgrade = upgrade; - this.file = file; - this.shutdownHook = shutdownHook; - } - - public void init() { - if (environment.useCustomLogbackConfig()) { - Logger root = context.getLogger(Logger.ROOT_LOGGER_NAME); - root.info("Using external logback configuration file."); - } else { - context.reset(); - - // configure loggers: - for (Map.Entry loglevel : LoggerModule.DEFAULT_LOG_LEVELS.entrySet()) { - Logger logger = context.getLogger(loglevel.getKey()); - logger.setLevel(loglevel.getValue()); - logger.setAdditive(false); - logger.addAppender(stdout); - logger.addAppender(file); - } - - // configure upgrade logger: - Logger upgrades = context.getLogger("org.cryptomator.cryptofs.migration"); - upgrades.setLevel(Level.DEBUG); - upgrades.addAppender(stdout); - upgrades.addAppender(upgrade); - upgrades.addAppender(file); - upgrades.setAdditive(false); - - // add shutdown hook - shutdownHook.runOnShutdown(ShutdownHook.PRIO_LAST, context::stop); - } - } - -} diff --git a/src/main/java/org/cryptomator/logging/LoggerModule.java b/src/main/java/org/cryptomator/logging/LoggerModule.java deleted file mode 100644 index 5031fe3be..000000000 --- a/src/main/java/org/cryptomator/logging/LoggerModule.java +++ /dev/null @@ -1,130 +0,0 @@ -package org.cryptomator.logging; - -import ch.qos.logback.classic.Level; -import ch.qos.logback.classic.Logger; -import ch.qos.logback.classic.LoggerContext; -import ch.qos.logback.classic.encoder.PatternLayoutEncoder; -import ch.qos.logback.classic.spi.ILoggingEvent; -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.rolling.FixedWindowRollingPolicy; -import ch.qos.logback.core.rolling.RollingFileAppender; -import ch.qos.logback.core.util.FileSize; -import dagger.Module; -import dagger.Provides; -import org.cryptomator.common.Environment; -import org.slf4j.ILoggerFactory; -import org.slf4j.LoggerFactory; - -import javax.inject.Named; -import javax.inject.Singleton; -import java.nio.file.Path; -import java.util.Map; - -@Module -public class LoggerModule { - - private static final String UPGRADE_FILENAME = "upgrade.log"; - private static final String LOGFILE_NAME = "cryptomator0.log"; - private static final String LOGFILE_ROLLING_PATTERN = "cryptomator%i.log"; - 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 // - ); - static final Map DEBUG_LOG_LEVELS = Map.of( // - Logger.ROOT_LOGGER_NAME, Level.INFO, // - "org.cryptomator", Level.TRACE // - ); - - @Provides - @Singleton - static LoggerContext provideLoggerContext() { - ILoggerFactory loggerFactory = LoggerFactory.getILoggerFactory(); - if (loggerFactory instanceof LoggerContext context) { - return context; - } else { - throw new IllegalStateException("SLF4J not bound to Logback."); - } - } - - @Provides - @Singleton - static PatternLayoutEncoder provideLayoutEncoder(LoggerContext context) { - PatternLayoutEncoder ple = new PatternLayoutEncoder(); - ple.setPattern(LOG_PATTERN); - ple.setContext(context); - ple.start(); - return ple; - } - - @Provides - @Singleton - @Named("stdoutAppender") - static Appender provideStdoutAppender(LoggerContext context, PatternLayoutEncoder encoder) { - ConsoleAppender appender = new ConsoleAppender<>(); - appender.setContext(context); - appender.setEncoder(encoder); - appender.start(); - return appender; - } - - @Provides - @Singleton - @Named("fileAppender") - static Appender provideFileAppender(LoggerContext context, PatternLayoutEncoder encoder, Environment environment) { - var optionalLogDir = environment.getLogDir(); - if (optionalLogDir.isPresent()) { - Path logDir = optionalLogDir.get(); - RollingFileAppender appender = new RollingFileAppender<>(); - appender.setContext(context); - appender.setFile(logDir.resolve(LOGFILE_NAME).toString()); - appender.setEncoder(encoder); - LaunchAndSizeBasedTriggeringPolicy triggeringPolicy = new LaunchAndSizeBasedTriggeringPolicy(FileSize.valueOf(LOG_MAX_SIZE)); - triggeringPolicy.setContext(context); - triggeringPolicy.start(); - appender.setTriggeringPolicy(triggeringPolicy); - FixedWindowRollingPolicy rollingPolicy = new FixedWindowRollingPolicy(); - rollingPolicy.setContext(context); - rollingPolicy.setFileNamePattern(logDir.resolve(LOGFILE_ROLLING_PATTERN).toString()); - rollingPolicy.setMinIndex(LOGFILE_ROLLING_MIN); - rollingPolicy.setMaxIndex(LOGFILE_ROLLING_MAX); - rollingPolicy.setParent(appender); - rollingPolicy.start(); - appender.setRollingPolicy(rollingPolicy); - appender.start(); - return appender; - } else { - NOPAppender appender = new NOPAppender<>(); - appender.setContext(context); - return appender; - } - } - - @Provides - @Singleton - @Named("upgradeAppender") - static Appender provideUpgradeAppender(LoggerContext context, PatternLayoutEncoder encoder, Environment environment) { - var optionalLogDir = environment.getLogDir(); - if (optionalLogDir.isPresent()) { - FileAppender appender = new FileAppender<>(); - appender.setFile(optionalLogDir.get().resolve(UPGRADE_FILENAME).toString()); - appender.setContext(context); - appender.setEncoder(encoder); - appender.start(); - return appender; - } else { - NOPAppender appender = new NOPAppender<>(); - appender.setContext(context); - return appender; - } - } - - -} diff --git a/src/test/java/org/cryptomator/common/EnvironmentTest.java b/src/test/java/org/cryptomator/common/EnvironmentTest.java index a4c1179b7..9c048a200 100644 --- a/src/test/java/org/cryptomator/common/EnvironmentTest.java +++ b/src/test/java/org/cryptomator/common/EnvironmentTest.java @@ -21,7 +21,7 @@ public class EnvironmentTest { @BeforeEach public void init() { - env = Mockito.spy(new Environment()); + env = Mockito.spy(Environment.getInstance()); Mockito.when(env.getHomeDir()).thenReturn(Path.of("/home/testuser")); }