diff --git a/pom.xml b/pom.xml index ccfa46a9..88e13875 100644 --- a/pom.xml +++ b/pom.xml @@ -59,9 +59,14 @@ 1.7 - log4j - log4j - 1.2.17 + org.apache.logging.log4j + log4j-api + 2.14.0 + + + org.apache.logging.log4j + log4j-core + 2.14.0 commons-cli diff --git a/src/main/java/com/rarchives/ripme/ripper/AbstractRipper.java b/src/main/java/com/rarchives/ripme/ripper/AbstractRipper.java index 3653b9f0..132658b5 100644 --- a/src/main/java/com/rarchives/ripme/ripper/AbstractRipper.java +++ b/src/main/java/com/rarchives/ripme/ripper/AbstractRipper.java @@ -14,8 +14,9 @@ import java.util.List; import java.util.Map; import java.util.Observable; import java.util.Scanner; -import org.apache.log4j.FileAppender; -import org.apache.log4j.Logger; + +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; import org.jsoup.HttpStatusException; import com.rarchives.ripme.App; import com.rarchives.ripme.ui.RipStatusComplete; @@ -28,7 +29,7 @@ public abstract class AbstractRipper extends Observable implements RipperInterface, Runnable { - protected static final Logger LOGGER = Logger.getLogger(AbstractRipper.class); + protected static final Logger LOGGER = LogManager.getLogger(AbstractRipper.class); private final String URLHistoryFile = Utils.getURLHistoryFile(); public static final String USER_AGENT = @@ -177,12 +178,15 @@ public abstract class AbstractRipper */ public void setup() throws IOException { setWorkingDir(this.url); - Logger rootLogger = Logger.getRootLogger(); - FileAppender fa = (FileAppender) rootLogger.getAppender("FILE"); - if (fa != null) { - fa.setFile(this.workingDir + File.separator + "log.txt"); - fa.activateOptions(); - } + // we do not care if the rollingfileappender is active, just change the logfile in case + // TODO this does not work - not even with + // .withFileName("${sys:logFilename}") + // in Utils.java, RollingFileAppender. +// System.setProperty("logFilename", this.workingDir + "/log.txt"); +// LOGGER.debug("Changing log file to '{}/log.txt'", this.workingDir); +// LoggerContext ctx = (LoggerContext) LogManager.getContext(false); +// ctx.reconfigure(); +// ctx.updateLoggers(); this.threadPool = new DownloadThreadPool(); } @@ -482,13 +486,13 @@ public abstract class AbstractRipper RipStatusMessage msg = new RipStatusMessage(STATUS.RIP_COMPLETE, rsc); observer.update(this, msg); - Logger rootLogger = Logger.getRootLogger(); - FileAppender fa = (FileAppender) rootLogger.getAppender("FILE"); - if (fa != null) { - LOGGER.debug("Changing log file back to 'ripme.log'"); - fa.setFile("ripme.log"); - fa.activateOptions(); - } + // we do not care if the rollingfileappender is active, just change the logfile in case + // TODO - does not work. +// System.setProperty("logFilename", "ripme.log"); +// LOGGER.debug("Changing log file back to 'ripme.log'"); +// LoggerContext ctx = (LoggerContext) LogManager.getContext(false); +// ctx.reconfigure(); + if (Utils.getConfigBoolean("urls_only.save", false)) { String urlFile = this.workingDir + File.separator + "urls.txt"; try { diff --git a/src/main/java/com/rarchives/ripme/ui/MainWindow.java b/src/main/java/com/rarchives/ripme/ui/MainWindow.java index 48e8d836..935e48d9 100644 --- a/src/main/java/com/rarchives/ripme/ui/MainWindow.java +++ b/src/main/java/com/rarchives/ripme/ui/MainWindow.java @@ -49,14 +49,15 @@ import javax.swing.text.SimpleAttributeSet; import javax.swing.text.StyleConstants; import javax.swing.text.StyledDocument; -import org.apache.log4j.ConsoleAppender; -import org.apache.log4j.FileAppender; -import org.apache.log4j.Level; -import org.apache.log4j.Logger; - import com.rarchives.ripme.ripper.AbstractRipper; import com.rarchives.ripme.utils.RipUtils; import com.rarchives.ripme.utils.Utils; +import org.apache.logging.log4j.Level; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +import org.apache.logging.log4j.core.LoggerContext; +import org.apache.logging.log4j.core.config.Configuration; +import org.apache.logging.log4j.core.config.LoggerConfig; import javax.swing.UnsupportedLookAndFeelException; @@ -65,7 +66,7 @@ import javax.swing.UnsupportedLookAndFeelException; */ public final class MainWindow implements Runnable, RipStatusHandler { - private static final Logger LOGGER = Logger.getLogger(MainWindow.class); + private static final Logger LOGGER = LogManager.getLogger(MainWindow.class); private boolean isRipping = false; // Flag to indicate if we're ripping something @@ -993,16 +994,11 @@ public final class MainWindow implements Runnable, RipStatusHandler { newLevel = Level.ERROR; break; } - Logger.getRootLogger().setLevel(newLevel); - LOGGER.setLevel(newLevel); - ConsoleAppender ca = (ConsoleAppender) Logger.getRootLogger().getAppender("stdout"); - if (ca != null) { - ca.setThreshold(newLevel); - } - FileAppender fa = (FileAppender) Logger.getRootLogger().getAppender("FILE"); - if (fa != null) { - fa.setThreshold(newLevel); - } + LoggerContext ctx = (LoggerContext) LogManager.getContext(false); + Configuration config = ctx.getConfiguration(); + LoggerConfig loggerConfig = config.getLoggerConfig(LogManager.ROOT_LOGGER_NAME); + loggerConfig.setLevel(newLevel); + ctx.updateLoggers(); // This causes all Loggers to refetch information from their LoggerConfig. } private void setupTrayIcon() { @@ -1382,34 +1378,34 @@ public final class MainWindow implements Runnable, RipStatusHandler { switch (msg.getStatus()) { case LOADING_RESOURCE: case DOWNLOAD_STARTED: - if (LOGGER.isEnabledFor(Level.INFO)) { + if (LOGGER.isEnabled(Level.INFO)) { appendLog("Downloading " + msg.getObject(), Color.BLACK); } break; case DOWNLOAD_COMPLETE: - if (LOGGER.isEnabledFor(Level.INFO)) { + if (LOGGER.isEnabled(Level.INFO)) { appendLog("Downloaded " + msg.getObject(), Color.GREEN); } break; case DOWNLOAD_COMPLETE_HISTORY: - if (LOGGER.isEnabledFor(Level.INFO)) { + if (LOGGER.isEnabled(Level.INFO)) { appendLog("" + msg.getObject(), Color.GREEN); } break; case DOWNLOAD_ERRORED: - if (LOGGER.isEnabledFor(Level.ERROR)) { + if (LOGGER.isEnabled(Level.ERROR)) { appendLog((String) msg.getObject(), Color.RED); } break; case DOWNLOAD_WARN: - if (LOGGER.isEnabledFor(Level.WARN)) { + if (LOGGER.isEnabled(Level.WARN)) { appendLog((String) msg.getObject(), Color.ORANGE); } break; case RIP_ERRORED: - if (LOGGER.isEnabledFor(Level.ERROR)) { + if (LOGGER.isEnabled(Level.ERROR)) { appendLog((String) msg.getObject(), Color.RED); } stopButton.setEnabled(false); @@ -1511,7 +1507,7 @@ public final class MainWindow implements Runnable, RipStatusHandler { // Update total bytes break; case NO_ALBUM_OR_USER: - if (LOGGER.isEnabledFor(Level.ERROR)) { + if (LOGGER.isEnabled(Level.ERROR)) { appendLog((String) msg.getObject(), Color.RED); } stopButton.setEnabled(false); diff --git a/src/main/java/com/rarchives/ripme/utils/Utils.java b/src/main/java/com/rarchives/ripme/utils/Utils.java index 7f9d99aa..b1be308d 100644 --- a/src/main/java/com/rarchives/ripme/utils/Utils.java +++ b/src/main/java/com/rarchives/ripme/utils/Utils.java @@ -3,7 +3,6 @@ package com.rarchives.ripme.utils; import java.io.File; import java.io.FileNotFoundException; import java.io.IOException; -import java.io.InputStream; import java.io.UnsupportedEncodingException; import java.lang.reflect.Constructor; import java.net.URI; @@ -40,9 +39,15 @@ import com.rarchives.ripme.ripper.AbstractRipper; import org.apache.commons.configuration.ConfigurationException; import org.apache.commons.configuration.PropertiesConfiguration; -import org.apache.log4j.LogManager; -import org.apache.log4j.Logger; -import org.apache.log4j.PropertyConfigurator; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +import org.apache.logging.log4j.core.LoggerContext; +import org.apache.logging.log4j.core.appender.RollingFileAppender; +import org.apache.logging.log4j.core.appender.rolling.DefaultRolloverStrategy; +import org.apache.logging.log4j.core.appender.rolling.SizeBasedTriggeringPolicy; +import org.apache.logging.log4j.core.appender.rolling.TriggeringPolicy; +import org.apache.logging.log4j.core.config.Configuration; +import org.apache.logging.log4j.core.config.LoggerConfig; /** * Common utility functions used in various places throughout the project. @@ -54,7 +59,7 @@ public class Utils { private static final String RIP_DIRECTORY = "rips"; private static final String CONFIG_FILE = "rip.properties"; private static final String OS = System.getProperty("os.name").toLowerCase(); - private static final Logger LOGGER = Logger.getLogger(Utils.class); + private static final Logger LOGGER = LogManager.getLogger(Utils.class); private static final int SHORTENED_PATH_LENGTH = 12; private static PropertiesConfiguration config; @@ -602,20 +607,32 @@ public class Utils { * Configures root logger, either for FILE output or just console. */ public static void configureLogger() { - LogManager.shutdown(); - String logFile = getConfigBoolean("log.save", false) ? "log4j.file.properties" : "log4j.properties"; - try (InputStream stream = Utils.class.getClassLoader().getResourceAsStream(logFile)) { - if (stream == null) { - PropertyConfigurator.configure("src/main/resources/" + logFile); - } else { - PropertyConfigurator.configure(stream); + LoggerContext ctx = (LoggerContext) LogManager.getContext(false); + Configuration config = ctx.getConfiguration(); + LoggerConfig loggerConfig = config.getLoggerConfig(LogManager.ROOT_LOGGER_NAME); + + // write to ripme.log file if checked in GUI + boolean logSave = getConfigBoolean("log.save", false); + if (logSave) { + LOGGER.debug("add rolling appender ripmelog"); + TriggeringPolicy tp = SizeBasedTriggeringPolicy.createPolicy("20M"); + DefaultRolloverStrategy rs = DefaultRolloverStrategy.newBuilder().withMax("2").build(); + RollingFileAppender rolling = RollingFileAppender.newBuilder() + .setName("ripmelog") + .withFileName("ripme.log") + .withFilePattern("%d{yyyy-MM-dd HH:mm:ss} %p %m%n") + .withPolicy(tp) + .withStrategy(rs) + .build(); + loggerConfig.addAppender(rolling, null, null); + } else { + LOGGER.debug("remove rolling appender ripmelog"); + if (config.getAppender("ripmelog") != null) { + config.getAppender("ripmelog").stop(); } - - LOGGER.info("Loaded " + logFile); - } catch (IOException e) { - LOGGER.error(e.getMessage(), e); + loggerConfig.removeAppender("ripmelog"); } - + ctx.updateLoggers(); // This causes all Loggers to refetch information from their LoggerConfig. } /**