This is an automated email from the ASF dual-hosted git repository. vy pushed a commit to branch recycler-api-3.x in repository https://gitbox.apache.org/repos/asf/logging-log4j2.git
commit cd3cac5b196075ae25e09d8930e2b3ecf708b43e Author: Volkan Yazıcı <[email protected]> AuthorDate: Sat Mar 25 12:45:32 2023 +0100 Merge upstream changes for `SLF4JLogBuilder` --- .../org/apache/logging/slf4j/SLF4JLogBuilder.java | 229 ++++++++++++++++----- 1 file changed, 175 insertions(+), 54 deletions(-) diff --git a/log4j-to-slf4j/src/main/java/org/apache/logging/slf4j/SLF4JLogBuilder.java b/log4j-to-slf4j/src/main/java/org/apache/logging/slf4j/SLF4JLogBuilder.java index 947391739f..a910694d68 100644 --- a/log4j-to-slf4j/src/main/java/org/apache/logging/slf4j/SLF4JLogBuilder.java +++ b/log4j-to-slf4j/src/main/java/org/apache/logging/slf4j/SLF4JLogBuilder.java @@ -17,112 +17,233 @@ package org.apache.logging.slf4j; import org.apache.logging.log4j.Level; -import org.apache.logging.log4j.internal.DefaultLogBuilder; +import org.apache.logging.log4j.LogBuilder; +import org.apache.logging.log4j.Logger; +import org.apache.logging.log4j.Marker; import org.apache.logging.log4j.message.Message; +import org.apache.logging.log4j.message.SimpleMessage; import org.apache.logging.log4j.spi.ExtendedLogger; +import org.apache.logging.log4j.status.StatusLogger; +import org.apache.logging.log4j.util.LambdaUtil; +import org.apache.logging.log4j.util.StackLocatorUtil; +import org.apache.logging.log4j.util.Supplier; -public class SLF4JLogBuilder extends DefaultLogBuilder { +public class SLF4JLogBuilder implements LogBuilder { - public SLF4JLogBuilder(ExtendedLogger logger, Level level) { - super(logger, level); + private static Message EMPTY_MESSAGE = new SimpleMessage(""); + private static final String FQCN = SLF4JLogBuilder.class.getName(); + private static final Logger LOGGER = StatusLogger.getLogger(); + + private ExtendedLogger logger; + private Level level; + private Marker marker; + private Throwable throwable; + private volatile boolean inUse; + private final long threadId; + + public SLF4JLogBuilder(SLF4JLogger logger, Level level) { + this.logger = logger; + this.level = level; + this.threadId = Thread.currentThread().getId(); + this.inUse = level != null; } public SLF4JLogBuilder() { - super(); + this(null, null); } - @Override - protected boolean isEnabled(Message message) { - // SLF4J will check again later + public LogBuilder reset(SLF4JLogger logger, Level level) { + this.logger = logger; + this.level = level; + this.marker = null; + this.throwable = null; + this.inUse = true; + return this; + } + + public boolean isInUse() { + return this.inUse; + } + + private boolean isValid() { + if (!inUse) { + LOGGER.warn("Attempt to reuse LogBuilder was ignored. {}", StackLocatorUtil.getCallerClass(2)); + return false; + } + if (this.threadId != Thread.currentThread().getId()) { + LOGGER.warn("LogBuilder can only be used on the owning thread. {}", StackLocatorUtil.getCallerClass(2)); + return false; + } return true; } + private void logMessage(Message message) { + try { + logger.logMessage(FQCN, level, marker, message, throwable); + } finally { + inUse = false; + } + } + @Override - protected boolean isEnabled(CharSequence message) { - // SLF4J will check again later - return true; + public LogBuilder withMarker(Marker marker) { + this.marker = marker; + return this; } @Override - protected boolean isEnabled(String message) { - // SLF4J will check again later - return true; + public LogBuilder withThrowable(Throwable throwable) { + this.throwable = throwable; + return this; } @Override - protected boolean isEnabled(String message, Object... params) { - // SLF4J will check again later - return true; + public LogBuilder withLocation() { + LOGGER.info("Call to withLocation() ignored since SLF4J does not support setting location information."); + return this; } @Override - protected boolean isEnabled(Object message) { - // SLF4J will check again later - return true; + public LogBuilder withLocation(StackTraceElement location) { + return withLocation(); } @Override - protected boolean isEnabled(String message, Object p0) { - // SLF4J will check again later - return true; + public void log(CharSequence message) { + if (isValid()) { + logMessage(logger.getMessageFactory().newMessage(message)); + } } @Override - protected boolean isEnabled(String message, Object p0, Object p1) { - // SLF4J will check again later - return true; + public void log(String message) { + if (isValid()) { + logMessage(logger.getMessageFactory().newMessage(message)); + } } @Override - protected boolean isEnabled(String message, Object p0, Object p1, Object p2) { - // SLF4J will check again later - return true; + public void log(String message, Object... params) { + if (isValid()) { + logMessage(logger.getMessageFactory().newMessage(message, params)); + } } @Override - protected boolean isEnabled(String message, Object p0, Object p1, Object p2, Object p3) { - // SLF4J will check again later - return true; + public void log(String message, Supplier<?>... params) { + if (isValid()) { + logMessage(logger.getMessageFactory().newMessage(message, LambdaUtil.getAll(params))); + } } @Override - protected boolean isEnabled(String message, Object p0, Object p1, Object p2, Object p3, Object p4) { - // SLF4J will check again later - return true; + public void log(Message message) { + if (isValid()) { + logMessage(message); + } } @Override - protected boolean isEnabled(String message, Object p0, Object p1, Object p2, Object p3, Object p4, Object p5) { - // SLF4J will check again later - return true; + public void log(Supplier<Message> messageSupplier) { + if (isValid()) { + logMessage(messageSupplier.get()); + } } @Override - protected boolean isEnabled(String message, Object p0, Object p1, Object p2, Object p3, Object p4, Object p5, - Object p6) { - // SLF4J will check again later - return true; + public Message logAndGet(Supplier<Message> messageSupplier) { + Message message = null; + if (isValid()) { + logMessage(message = messageSupplier.get()); + } + return message; } @Override - protected boolean isEnabled(String message, Object p0, Object p1, Object p2, Object p3, Object p4, Object p5, - Object p6, Object p7) { - // SLF4J will check again later - return true; + public void log(Object message) { + if (isValid()) { + logMessage(logger.getMessageFactory().newMessage(message)); + } } @Override - protected boolean isEnabled(String message, Object p0, Object p1, Object p2, Object p3, Object p4, Object p5, - Object p6, Object p7, Object p8) { - // SLF4J will check again later - return true; + public void log(String message, Object p0) { + if (isValid()) { + logMessage(logger.getMessageFactory().newMessage(message, p0)); + } } @Override - protected boolean isEnabled(String message, Object p0, Object p1, Object p2, Object p3, Object p4, Object p5, - Object p6, Object p7, Object p8, Object p9) { - // SLF4J will check again later - return true; + public void log(String message, Object p0, Object p1) { + if (isValid()) { + logMessage(logger.getMessageFactory().newMessage(message, p0, p1)); + } + } + + @Override + public void log(String message, Object p0, Object p1, Object p2) { + if (isValid()) { + logMessage(logger.getMessageFactory().newMessage(message, p0, p1, p2)); + } + } + + @Override + public void log(String message, Object p0, Object p1, Object p2, Object p3) { + if (isValid()) { + logMessage(logger.getMessageFactory().newMessage(message, p0, p1, p2, p3)); + } + } + + @Override + public void log(String message, Object p0, Object p1, Object p2, Object p3, Object p4) { + if (isValid()) { + logMessage(logger.getMessageFactory().newMessage(message, p0, p1, p2, p3, p4)); + } + } + + @Override + public void log(String message, Object p0, Object p1, Object p2, Object p3, Object p4, Object p5) { + if (isValid()) { + logMessage(logger.getMessageFactory().newMessage(message, p0, p1, p2, p3, p4, p5)); + } + } + + @Override + public void log(String message, Object p0, Object p1, Object p2, Object p3, Object p4, Object p5, Object p6) { + if (isValid()) { + logMessage(logger.getMessageFactory().newMessage(message, p0, p1, p2, p3, p4, p5, p6)); + } + } + + @Override + public void log(String message, Object p0, Object p1, Object p2, Object p3, Object p4, Object p5, Object p6, + Object p7) { + if (isValid()) { + logMessage(logger.getMessageFactory().newMessage(message, p0, p1, p2, p3, p4, p5, p6, p7)); + } + } + + @Override + public void log(String message, Object p0, Object p1, Object p2, Object p3, Object p4, Object p5, Object p6, + Object p7, Object p8) { + if (isValid()) { + logMessage(logger.getMessageFactory().newMessage(message, p0, p1, p2, p3, p4, p5, p6, p7, p8)); + } + } + + @Override + public void log(String message, Object p0, Object p1, Object p2, Object p3, Object p4, Object p5, Object p6, + Object p7, Object p8, Object p9) { + if (isValid()) { + logMessage(logger.getMessageFactory().newMessage(message, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9)); + } + } + + @Override + public void log() { + if (isValid()) { + logMessage(EMPTY_MESSAGE); + } } }
