diff --git a/docs-core/pom.xml b/docs-core/pom.xml
index 4decd254..d68fb3da 100644
--- a/docs-core/pom.xml
+++ b/docs-core/pom.xml
@@ -62,16 +62,6 @@
jsoup
-
- log4j
- log4j
-
-
-
- org.slf4j
- slf4j-log4j12
-
-
org.slf4j
slf4j-api
@@ -82,6 +72,21 @@
jcl-over-slf4j
+
+ org.slf4j
+ jul-to-slf4j
+
+
+
+ org.apache.logging.log4j
+ log4j-to-slf4j
+
+
+
+ ch.qos.logback
+ logback-classic
+
+
at.favre.lib
bcrypt
diff --git a/docs-core/src/main/java/com/sismics/util/io/InputStreamReaderThread.java b/docs-core/src/main/java/com/sismics/util/io/InputStreamReaderThread.java
index ff2da29d..bf82017b 100644
--- a/docs-core/src/main/java/com/sismics/util/io/InputStreamReaderThread.java
+++ b/docs-core/src/main/java/com/sismics/util/io/InputStreamReaderThread.java
@@ -1,7 +1,8 @@
package com.sismics.util.io;
import com.google.common.io.Closer;
-import org.apache.log4j.Logger;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
import java.io.BufferedReader;
import java.io.IOException;
@@ -15,7 +16,7 @@ import java.io.InputStreamReader;
*/
public class InputStreamReaderThread extends Thread {
- private static final Logger logger = Logger.getLogger(InputStreamReaderThread.class);
+ private static final Logger logger = LoggerFactory.getLogger(InputStreamReaderThread.class);
private InputStream is;
diff --git a/docs-core/src/main/java/com/sismics/util/log4j/LogCriteria.java b/docs-core/src/main/java/com/sismics/util/logback/LogCriteria.java
similarity index 92%
rename from docs-core/src/main/java/com/sismics/util/log4j/LogCriteria.java
rename to docs-core/src/main/java/com/sismics/util/logback/LogCriteria.java
index c28a31a6..b8306c6b 100644
--- a/docs-core/src/main/java/com/sismics/util/log4j/LogCriteria.java
+++ b/docs-core/src/main/java/com/sismics/util/logback/LogCriteria.java
@@ -1,7 +1,7 @@
-package com.sismics.util.log4j;
+package com.sismics.util.logback;
+import ch.qos.logback.classic.Level;
import org.apache.commons.lang3.StringUtils;
-import org.apache.log4j.Level;
/**
* Log search criteria.
diff --git a/docs-core/src/main/java/com/sismics/util/log4j/LogEntry.java b/docs-core/src/main/java/com/sismics/util/logback/LogEntry.java
similarity index 93%
rename from docs-core/src/main/java/com/sismics/util/log4j/LogEntry.java
rename to docs-core/src/main/java/com/sismics/util/logback/LogEntry.java
index b0120bc0..ceecd340 100644
--- a/docs-core/src/main/java/com/sismics/util/log4j/LogEntry.java
+++ b/docs-core/src/main/java/com/sismics/util/logback/LogEntry.java
@@ -1,6 +1,7 @@
-package com.sismics.util.log4j;
+package com.sismics.util.logback;
-import org.apache.log4j.Level;
+
+import ch.qos.logback.classic.Level;
/**
* Log entry.
diff --git a/docs-core/src/main/java/com/sismics/util/log4j/MemoryAppender.java b/docs-core/src/main/java/com/sismics/util/logback/MemoryAppender.java
similarity index 63%
rename from docs-core/src/main/java/com/sismics/util/log4j/MemoryAppender.java
rename to docs-core/src/main/java/com/sismics/util/logback/MemoryAppender.java
index 5c3bd657..8a0f3d56 100644
--- a/docs-core/src/main/java/com/sismics/util/log4j/MemoryAppender.java
+++ b/docs-core/src/main/java/com/sismics/util/logback/MemoryAppender.java
@@ -1,25 +1,22 @@
-package com.sismics.util.log4j;
+package com.sismics.util.logback;
+
+import ch.qos.logback.classic.Level;
+import ch.qos.logback.classic.spi.ILoggingEvent;
+import ch.qos.logback.core.AppenderBase;
+import com.google.common.collect.Lists;
+import com.sismics.docs.core.util.jpa.PaginatedList;
-import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.Queue;
import java.util.concurrent.ConcurrentLinkedQueue;
-import org.apache.log4j.AppenderSkeleton;
-import org.apache.log4j.Level;
-import org.apache.log4j.helpers.LogLog;
-import org.apache.log4j.spi.LoggingEvent;
-
-import com.google.common.collect.Lists;
-import com.sismics.docs.core.util.jpa.PaginatedList;
-
/**
- * Memory appender for Log4J.
+ * Memory appender for Logback.
*
* @author jtremeaux
*/
-public class MemoryAppender extends AppenderSkeleton {
+public class MemoryAppender extends AppenderBase {
/**
* Maximum size of the queue.
@@ -29,34 +26,18 @@ public class MemoryAppender extends AppenderSkeleton {
/**
* Queue of log entries.
*/
- private final Queue logQueue = new ConcurrentLinkedQueue();
+ private static final Queue logQueue = new ConcurrentLinkedQueue<>();
@Override
- public boolean requiresLayout() {
- return false;
- }
-
- @Override
- public synchronized void close() {
- if (closed) {
- return;
- }
- closed = true;
- }
-
- @Override
- public synchronized void append(LoggingEvent event) {
+ protected void append(ILoggingEvent event) {
while (logQueue.size() > size) {
logQueue.remove();
}
- if (closed) {
- LogLog.warn("This appender is already closed, cannot append event.");
- return;
- }
-
+
+
String loggerName = getLoggerName(event);
- LogEntry logEntry = new LogEntry(System.currentTimeMillis(), event.getLevel(), loggerName, event.getMessage().toString());
+ LogEntry logEntry = new LogEntry(System.currentTimeMillis(), event.getLevel(), loggerName, event.getMessage());
logQueue.add(logEntry);
}
@@ -66,7 +47,7 @@ public class MemoryAppender extends AppenderSkeleton {
* @param event Event
* @return Class name
*/
- private String getLoggerName(LoggingEvent event) {
+ private String getLoggerName(ILoggingEvent event) {
int index = event.getLoggerName().lastIndexOf('.');
return (index > -1) ?
@@ -75,12 +56,12 @@ public class MemoryAppender extends AppenderSkeleton {
}
/**
- * Getter of logList.
+ * Getter of size.
*
- * @return logList
+ * @return size
*/
- public Queue getLogList() {
- return logQueue;
+ public int getSize() {
+ return size;
}
/**
@@ -98,15 +79,14 @@ public class MemoryAppender extends AppenderSkeleton {
* @param criteria Search criteria
* @param list Paginated list (modified by side effect)
*/
- public void find(LogCriteria criteria, PaginatedList list) {
+ public static void find(LogCriteria criteria, PaginatedList list) {
List logEntryList = new LinkedList();
final Level minLevel = criteria.getMinLevel();
final String tag = criteria.getTag();
final String message = criteria.getMessage();
int resultCount = 0;
- for (Iterator it = logQueue.iterator(); it.hasNext();) {
- LogEntry logEntry = it.next();
- if ((minLevel == null || Integer.compare(logEntry.getLevel().toInt(), minLevel.toInt()) >= 0) &&
+ for (LogEntry logEntry : logQueue) {
+ if ((minLevel == null || logEntry.getLevel().toInt() >= minLevel.toInt()) &&
(tag == null || logEntry.getTag().toLowerCase().equals(tag)) &&
(message == null || logEntry.getMessage().toLowerCase().contains(message))) {
logEntryList.add(logEntry);
diff --git a/docs-core/src/test/resources/log4j.properties b/docs-core/src/test/resources/log4j.properties
deleted file mode 100644
index 7fc5f2b5..00000000
--- a/docs-core/src/test/resources/log4j.properties
+++ /dev/null
@@ -1,10 +0,0 @@
-log4j.rootCategory=DEBUG, CONSOLE, MEMORY
-log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
-log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
-log4j.appender.CONSOLE.layout.ConversionPattern=%d{DATE} %p %l %m %n
-log4j.appender.MEMORY=com.sismics.util.log4j.MemoryAppender
-log4j.appender.MEMORY.size=1000
-
-log4j.logger.com.sismics=INFO
-log4j.logger.org.hibernate=ERROR
-log4j.logger.org.apache.directory=ERROR
\ No newline at end of file
diff --git a/docs-core/src/test/resources/logback.xml b/docs-core/src/test/resources/logback.xml
new file mode 100644
index 00000000..0509aff9
--- /dev/null
+++ b/docs-core/src/test/resources/logback.xml
@@ -0,0 +1,18 @@
+
+
+
+
+ %date [%t] %-5level %logger{36} - %msg%n
+
+
+
+ 1000
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/docs-web-common/pom.xml b/docs-web-common/pom.xml
index c1ff6b9e..0bf2c5b5 100644
--- a/docs-web-common/pom.xml
+++ b/docs-web-common/pom.xml
@@ -48,11 +48,6 @@
guava
-
- log4j
- log4j
-
-
jakarta.servlet
jakarta.servlet-api
@@ -64,11 +59,6 @@
joda-time
-
- org.slf4j
- jul-to-slf4j
-
-
junit
diff --git a/docs-web-common/src/main/java/com/sismics/util/filter/RequestContextFilter.java b/docs-web-common/src/main/java/com/sismics/util/filter/RequestContextFilter.java
index 6775338e..849956a3 100644
--- a/docs-web-common/src/main/java/com/sismics/util/filter/RequestContextFilter.java
+++ b/docs-web-common/src/main/java/com/sismics/util/filter/RequestContextFilter.java
@@ -1,23 +1,26 @@
package com.sismics.util.filter;
+import ch.qos.logback.classic.Level;
+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.rolling.RollingFileAppender;
+import ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy;
+import ch.qos.logback.core.util.FileSize;
import com.sismics.docs.core.model.context.AppContext;
import com.sismics.docs.core.util.DirectoryUtil;
import com.sismics.docs.core.util.TransactionUtil;
import com.sismics.util.EnvironmentUtil;
import com.sismics.util.context.ThreadLocalContext;
import com.sismics.util.jpa.EMF;
+import jakarta.persistence.EntityManager;
+import jakarta.persistence.EntityTransaction;
import jakarta.servlet.*;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.ws.rs.core.HttpHeaders;
-import org.apache.log4j.Level;
-import org.apache.log4j.PatternLayout;
-import org.apache.log4j.RollingFileAppender;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import org.slf4j.bridge.SLF4JBridgeHandler;
-import jakarta.persistence.EntityManager;
-import jakarta.persistence.EntityTransaction;
import java.io.IOException;
import java.text.MessageFormat;
@@ -48,18 +51,30 @@ public class RequestContextFilter implements Filter {
// Initialize file logger
- RollingFileAppender fileAppender = new RollingFileAppender();
- fileAppender.setName("FILE");
- fileAppender.setFile(DirectoryUtil.getLogDirectory().resolve("docs.log").toString());
- fileAppender.setLayout(new PatternLayout("%d{DATE} %p %l %m %n"));
- fileAppender.setThreshold(Level.INFO);
- fileAppender.setAppend(true);
- fileAppender.setMaxFileSize("5MB");
- fileAppender.setMaxBackupIndex(5);
- fileAppender.activateOptions();
- org.apache.log4j.Logger.getRootLogger().addAppender(fileAppender);
- SLF4JBridgeHandler.removeHandlersForRootLogger();
- SLF4JBridgeHandler.install();
+ LoggerContext logContext = (LoggerContext) LoggerFactory.getILoggerFactory();
+ RollingFileAppender appender = new RollingFileAppender<>();
+ PatternLayoutEncoder encoder = new PatternLayoutEncoder();
+ encoder.setContext(logContext);
+ encoder.setPattern("%date [%t] %-5level %logger{36} - %msg%n");
+ encoder.start();
+ SizeAndTimeBasedRollingPolicy rollingPolicy = new SizeAndTimeBasedRollingPolicy<>();
+ rollingPolicy.setMaxFileSize(FileSize.valueOf("5MB"));
+ rollingPolicy.setFileNamePattern("docs.%d{yyyy-MM-dd_HH}.log");
+ rollingPolicy.setMaxHistory(5);
+ rollingPolicy.setContext(logContext);
+ rollingPolicy.setParent(appender);
+ rollingPolicy.start();
+ appender.setContext(logContext);
+ appender.setName("FILE");
+ appender.setFile(DirectoryUtil.getLogDirectory().resolve("docs.log").toString());
+ appender.setEncoder(encoder);
+ appender.setRollingPolicy(rollingPolicy);
+ appender.setAppend(true);
+ appender.start();
+ ch.qos.logback.classic.Logger logger = logContext.getLogger(Logger.ROOT_LOGGER_NAME);
+ logger.setAdditive(false);
+ logger.setLevel(Level.INFO);
+ logger.addAppender(appender);
// Initialize the application context
TransactionUtil.handle(AppContext::getInstance);
diff --git a/docs-web/pom.xml b/docs-web/pom.xml
index 20b06e16..1dd2368d 100644
--- a/docs-web/pom.xml
+++ b/docs-web/pom.xml
@@ -63,11 +63,6 @@
guava
-
- log4j
- log4j
-
-
joda-time
joda-time
diff --git a/docs-web/src/dev/resources/log4j.properties b/docs-web/src/dev/resources/log4j.properties
deleted file mode 100644
index ad707aff..00000000
--- a/docs-web/src/dev/resources/log4j.properties
+++ /dev/null
@@ -1,11 +0,0 @@
-log4j.rootCategory=WARN, CONSOLE, MEMORY
-log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
-log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
-log4j.appender.CONSOLE.layout.ConversionPattern=%d{DATE} %p %l %m %n
-log4j.appender.MEMORY=com.sismics.util.log4j.MemoryAppender
-log4j.appender.MEMORY.size=1000
-
-log4j.logger.com.sismics=DEBUG
-log4j.logger.org.apache.pdfbox=ERROR
-log4j.logger.org.glassfish.jersey.servlet.WebComponent=ERROR
-log4j.logger.org.apache.directory=ERROR
\ No newline at end of file
diff --git a/docs-web/src/dev/resources/logback.xml b/docs-web/src/dev/resources/logback.xml
new file mode 100644
index 00000000..5129b5e3
--- /dev/null
+++ b/docs-web/src/dev/resources/logback.xml
@@ -0,0 +1,19 @@
+
+
+
+
+ %date [%t] %-5level %logger{36} - %msg%n
+
+
+
+ 1000
+
+
+
+
+
+
+
+
+
+
diff --git a/docs-web/src/main/java/com/sismics/docs/rest/resource/AppResource.java b/docs-web/src/main/java/com/sismics/docs/rest/resource/AppResource.java
index bb1e8edd..59d7d7ff 100644
--- a/docs-web/src/main/java/com/sismics/docs/rest/resource/AppResource.java
+++ b/docs-web/src/main/java/com/sismics/docs/rest/resource/AppResource.java
@@ -1,5 +1,6 @@
package com.sismics.docs.rest.resource;
+import ch.qos.logback.classic.Level;
import com.google.common.base.Strings;
import com.sismics.docs.core.constant.ConfigType;
import com.sismics.docs.core.constant.Constants;
@@ -23,9 +24,9 @@ import com.sismics.rest.exception.ServerException;
import com.sismics.rest.util.ValidationUtil;
import com.sismics.util.JsonUtil;
import com.sismics.util.context.ThreadLocalContext;
-import com.sismics.util.log4j.LogCriteria;
-import com.sismics.util.log4j.LogEntry;
-import com.sismics.util.log4j.MemoryAppender;
+import com.sismics.util.logback.LogCriteria;
+import com.sismics.util.logback.LogEntry;
+import com.sismics.util.logback.MemoryAppender;
import jakarta.json.Json;
import jakarta.json.JsonArrayBuilder;
import jakarta.json.JsonObjectBuilder;
@@ -34,8 +35,6 @@ import jakarta.persistence.Query;
import jakarta.ws.rs.*;
import jakarta.ws.rs.core.Response;
import org.apache.commons.lang3.StringUtils;
-import org.apache.log4j.Appender;
-import org.apache.log4j.Level;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -539,14 +538,6 @@ public class AppResource extends BaseResource {
}
checkBaseFunction(BaseFunction.ADMIN);
- // Get the memory appender
- org.apache.log4j.Logger logger = org.apache.log4j.Logger.getRootLogger();
- Appender appender = logger.getAppender("MEMORY");
- if (!(appender instanceof MemoryAppender)) {
- throw new ServerException("ServerError", "MEMORY appender not configured");
- }
- MemoryAppender memoryAppender = (MemoryAppender) appender;
-
// Find the logs
LogCriteria logCriteria = new LogCriteria()
.setMinLevel(Level.toLevel(StringUtils.stripToNull(minLevel)))
@@ -554,7 +545,7 @@ public class AppResource extends BaseResource {
.setMessage(StringUtils.stripToNull(message));
PaginatedList paginatedList = PaginatedLists.create(limit, offset);
- memoryAppender.find(logCriteria, paginatedList);
+ MemoryAppender.find(logCriteria, paginatedList);
JsonArrayBuilder logs = Json.createArrayBuilder();
for (LogEntry logEntry : paginatedList.getResultList()) {
logs.add(Json.createObjectBuilder()
diff --git a/docs-web/src/prod/resources/log4j.properties b/docs-web/src/prod/resources/log4j.properties
deleted file mode 100644
index f58c58d8..00000000
--- a/docs-web/src/prod/resources/log4j.properties
+++ /dev/null
@@ -1,12 +0,0 @@
-log4j.rootCategory=WARN, CONSOLE, MEMORY
-log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
-log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
-log4j.appender.CONSOLE.layout.ConversionPattern=%d{DATE} %p %l %m %n
-log4j.appender.MEMORY=com.sismics.util.log4j.MemoryAppender
-log4j.appender.MEMORY.size=1000
-
-log4j.logger.com.sismics=INFO
-log4j.logger.org.apache.pdfbox=ERROR
-log4j.logger.org.glassfish.jersey.servlet.WebComponent=ERROR
-log4j.logger.org.apache.directory=ERROR
-log4j.logger.org.odftoolkit=ERROR
\ No newline at end of file
diff --git a/docs-web/src/prod/resources/logback.xml b/docs-web/src/prod/resources/logback.xml
new file mode 100644
index 00000000..b7a2ed10
--- /dev/null
+++ b/docs-web/src/prod/resources/logback.xml
@@ -0,0 +1,20 @@
+
+
+
+
+ %date [%t] %-5level %logger{36} - %msg%n
+
+
+
+ 1000
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs-web/src/test/resources/log4j.properties b/docs-web/src/test/resources/log4j.properties
deleted file mode 100644
index c0e4e3d6..00000000
--- a/docs-web/src/test/resources/log4j.properties
+++ /dev/null
@@ -1,15 +0,0 @@
-log4j.rootCategory=INFO, CONSOLE, MEMORY
-log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
-log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
-log4j.appender.CONSOLE.layout.ConversionPattern=%d{DATE} %p %l %m %n
-log4j.appender.MEMORY=com.sismics.util.log4j.MemoryAppender
-log4j.appender.MEMORY.size=1000
-
-log4j.logger.com.sismics=INFO
-log4j.logger.com.sismics.util.jpa=ERROR
-log4j.logger.org.hibernate=ERROR
-log4j.logger.org.apache.pdfbox=INFO
-log4j.logger.com.mchange=ERROR
-log4j.logger.org.apache.directory=ERROR
-log4j.logger.org.glassfish.grizzly=ERROR
-log4j.logger.org.odftoolkit=ERROR
\ No newline at end of file
diff --git a/docs-web/src/test/resources/logback.xml b/docs-web/src/test/resources/logback.xml
new file mode 100644
index 00000000..33d1ea67
--- /dev/null
+++ b/docs-web/src/test/resources/logback.xml
@@ -0,0 +1,23 @@
+
+
+
+
+ %date [%t] %-5level %logger{36} - %msg%n
+
+
+
+ 1000
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pom.xml b/pom.xml
index 1994ba03..ef890777 100644
--- a/pom.xml
+++ b/pom.xml
@@ -22,10 +22,11 @@
1.5
2.3.32
31.1-jre
- 1.2.17
- 1.7.30
- 1.7.30
- 1.7.30
+ 2.0.7
+ 2.0.7
+ 2.0.7
+ 2.20.0
+ 1.4.6
4.13.2
1.4.199
2.1.1
@@ -217,18 +218,6 @@
${com.squareup.okhttp3.okhttp.version}
-
- log4j
- log4j
- ${log4j.log4j.version}
-
-
-
- org.slf4j
- slf4j-log4j12
- ${org.slf4j.version}
-
-
org.slf4j
slf4j-api
@@ -247,6 +236,18 @@
${org.slf4j.jul-to-slf4j.version}
+
+ org.apache.logging.log4j
+ log4j-to-slf4j
+ ${org.apache.logging.log4j.log4j-to-slf4j.version}
+
+
+
+ ch.qos.logback
+ logback-classic
+ ${ch.qos.logback.logback-classic.version}
+
+
junit
junit