From a3474e05eb2d2d40b83522ea0e1915210099be15 Mon Sep 17 00:00:00 2001 From: Sebastian Stenzel Date: Tue, 26 Feb 2019 12:26:14 +0100 Subject: [PATCH] Fixes #835 --- .../org/cryptomator/logging/DebugMode.java | 63 +++++++------------ .../org/cryptomator/logging/LoggerModule.java | 34 ++++++---- main/ui/src/main/resources/fxml/settings.fxml | 1 - .../ui/src/main/resources/localization/en.txt | 3 +- 4 files changed, 45 insertions(+), 56 deletions(-) diff --git a/main/launcher/src/main/java/org/cryptomator/logging/DebugMode.java b/main/launcher/src/main/java/org/cryptomator/logging/DebugMode.java index bf72627ad..de9e3110b 100644 --- a/main/launcher/src/main/java/org/cryptomator/logging/DebugMode.java +++ b/main/launcher/src/main/java/org/cryptomator/logging/DebugMode.java @@ -8,73 +8,52 @@ 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.FxApplicationScoped; +import javafx.beans.value.ObservableValue; import org.cryptomator.common.settings.Settings; -import org.slf4j.ILoggerFactory; import org.slf4j.LoggerFactory; import javax.inject.Inject; import javax.inject.Singleton; -import java.util.Collection; - -import static java.util.Arrays.asList; +import java.util.Map; @Singleton public class DebugMode { private static final org.slf4j.Logger LOG = LoggerFactory.getLogger(DebugMode.class); - private static final Collection LOGGER_UPGRADES = asList( // - loggerUpgrade(org.slf4j.Logger.ROOT_LOGGER_NAME, Level.INFO), // - loggerUpgrade("org.cryptomator", Level.TRACE), // - loggerUpgrade("org.eclipse.jetty.server.HttpChannel", Level.DEBUG) // - ); - private final Settings settings; + private final LoggerContext context; @Inject - public DebugMode(Settings settings) { + public DebugMode(Settings settings, LoggerContext context) { this.settings = settings; + this.context = context; } public void initialize() { - if (settings.debugMode().get()) { - enable(); - LOG.debug("Debug mode initialized"); - } + setLogLevels(settings.debugMode().get()); + settings.debugMode().addListener(this::logLevelChanged); } - private void enable() { - ILoggerFactory loggerFactory = LoggerFactory.getILoggerFactory(); - if (loggerFactory instanceof LoggerContext) { - LoggerContext context = (LoggerContext) loggerFactory; - LOGGER_UPGRADES.forEach(loggerUpgrade -> loggerUpgrade.execute(context)); + private void logLevelChanged(@SuppressWarnings("unused") ObservableValue observable, @SuppressWarnings("unused") Boolean oldValue, Boolean newValue) { + setLogLevels(newValue); + } + + private void setLogLevels(boolean debugMode) { + if (debugMode) { + setLogLevels(LoggerModule.DEBUG_LOG_LEVELS); + LOG.debug("Debug mode enabled"); } else { - LOG.warn("SLF4J not bound to Logback."); + LOG.debug("Debug mode disabled"); + setLogLevels(LoggerModule.DEFAULT_LOG_LEVELS); } } - private static LoggerUpgrade loggerUpgrade(String loggerName, Level minLevel) { - return new LoggerUpgrade(loggerName, minLevel); - } - - private static class LoggerUpgrade { - - private final Level level; - private final String loggerName; - - public LoggerUpgrade(String loggerName, Level minLevel) { - this.loggerName = loggerName; - this.level = minLevel; + private void setLogLevels(Map logLevels) { + for (Map.Entry loglevel : logLevels.entrySet()) { + Logger logger = context.getLogger(loglevel.getKey()); + logger.setLevel(loglevel.getValue()); } - - public void execute(LoggerContext context) { - Logger logger = context.getLogger(loggerName); - if (logger != null && logger.getEffectiveLevel().isGreaterOrEqual(level)) { - logger.setLevel(level); - } - } - } } \ No newline at end of file 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 4e805fc44..1c0ef1bcc 100644 --- a/main/launcher/src/main/java/org/cryptomator/logging/LoggerModule.java +++ b/main/launcher/src/main/java/org/cryptomator/logging/LoggerModule.java @@ -22,6 +22,7 @@ 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 { @@ -32,8 +33,15 @@ public class LoggerModule { private static final int LOGFILE_ROLLING_MIN = 1; private static final int LOGFILE_ROLLING_MAX = 9; private static final double SHUTDOWN_DELAY_MS = 100; - private static final Level ROOT_LOG_LEVEL = Level.INFO; private static final String LOG_PATTERN = "%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n"; + 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 @@ -133,17 +141,21 @@ public class LoggerModule { return () -> { context.reset(); - // configure root logger: - Logger root = context.getLogger(Logger.ROOT_LOGGER_NAME); - root.setLevel(ROOT_LOG_LEVEL); - root.addAppender(stdout); - root.addAppender(file); + // configure loggers: + for (Map.Entry 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 root logger: - Logger uprades = context.getLogger("org.cryptomator.ui.model"); - uprades.setLevel(Level.DEBUG); - uprades.addAppender(stdout); - uprades.addAppender(upgrade); + // configure upgrade logger: + Logger upgrades = context.getLogger("org.cryptomator.ui.model.upgrade"); + upgrades.setLevel(Level.DEBUG); + upgrades.addAppender(stdout); + upgrades.addAppender(upgrade); + upgrades.setAdditive(false); // add shutdown hook DelayingShutdownHook shutdownHook = new DelayingShutdownHook(); diff --git a/main/ui/src/main/resources/fxml/settings.fxml b/main/ui/src/main/resources/fxml/settings.fxml index efa95f19c..070690e32 100644 --- a/main/ui/src/main/resources/fxml/settings.fxml +++ b/main/ui/src/main/resources/fxml/settings.fxml @@ -56,5 +56,4 @@ -