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.
}
/**