From 97d6e8f5289dc0203d03ff316de04ad1cc236d6c Mon Sep 17 00:00:00 2001 From: bgamard Date: Wed, 12 Apr 2023 12:16:04 +0200 Subject: [PATCH] log4j -> logback --- docs-core/pom.xml | 25 +++++--- .../util/io/InputStreamReaderThread.java | 5 +- .../util/{log4j => logback}/LogCriteria.java | 4 +- .../util/{log4j => logback}/LogEntry.java | 5 +- .../{log4j => logback}/MemoryAppender.java | 64 +++++++------------ docs-core/src/test/resources/log4j.properties | 10 --- docs-core/src/test/resources/logback.xml | 18 ++++++ docs-web-common/pom.xml | 10 --- .../util/filter/RequestContextFilter.java | 51 +++++++++------ docs-web/pom.xml | 5 -- docs-web/src/dev/resources/log4j.properties | 11 ---- docs-web/src/dev/resources/logback.xml | 19 ++++++ .../docs/rest/resource/AppResource.java | 19 ++---- docs-web/src/prod/resources/log4j.properties | 12 ---- docs-web/src/prod/resources/logback.xml | 20 ++++++ docs-web/src/test/resources/log4j.properties | 15 ----- docs-web/src/test/resources/logback.xml | 23 +++++++ pom.xml | 33 +++++----- 18 files changed, 180 insertions(+), 169 deletions(-) rename docs-core/src/main/java/com/sismics/util/{log4j => logback}/LogCriteria.java (92%) rename docs-core/src/main/java/com/sismics/util/{log4j => logback}/LogEntry.java (93%) rename docs-core/src/main/java/com/sismics/util/{log4j => logback}/MemoryAppender.java (63%) delete mode 100644 docs-core/src/test/resources/log4j.properties create mode 100644 docs-core/src/test/resources/logback.xml delete mode 100644 docs-web/src/dev/resources/log4j.properties create mode 100644 docs-web/src/dev/resources/logback.xml delete mode 100644 docs-web/src/prod/resources/log4j.properties create mode 100644 docs-web/src/prod/resources/logback.xml delete mode 100644 docs-web/src/test/resources/log4j.properties create mode 100644 docs-web/src/test/resources/logback.xml 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