diff --git a/log4j-async-logger/pom.xml b/log4j-async-logger/pom.xml index aba22bd83d9..ded7e5a9064 100644 --- a/log4j-async-logger/pom.xml +++ b/log4j-async-logger/pom.xml @@ -28,8 +28,21 @@ Apache Log4j Async Logger Alternative implementation of logger that uses LMAX Disruptor. + + + + org.jspecify.annotations.*;resolution:=optional + + + + + org.jspecify + jspecify + provided + + org.apache.logging.log4j log4j-core diff --git a/log4j-async-logger/src/main/java/org/apache/logging/log4j/async/logger/AsyncLogger.java b/log4j-async-logger/src/main/java/org/apache/logging/log4j/async/logger/AsyncLogger.java index ef58ea767ce..29259e4e2c3 100644 --- a/log4j-async-logger/src/main/java/org/apache/logging/log4j/async/logger/AsyncLogger.java +++ b/log4j-async-logger/src/main/java/org/apache/logging/log4j/async/logger/AsyncLogger.java @@ -33,12 +33,16 @@ import org.apache.logging.log4j.core.impl.ContextDataFactory; import org.apache.logging.log4j.core.time.Clock; import org.apache.logging.log4j.core.time.NanoClock; +import org.apache.logging.log4j.kit.logger.AbstractLogger; +import org.apache.logging.log4j.message.FlowMessageFactory; import org.apache.logging.log4j.message.Message; import org.apache.logging.log4j.message.MessageFactory; -import org.apache.logging.log4j.spi.AbstractLogger; import org.apache.logging.log4j.spi.recycler.Recycler; +import org.apache.logging.log4j.spi.recycler.RecyclerFactory; import org.apache.logging.log4j.util.StackLocatorUtil; import org.apache.logging.log4j.util.StringMap; +import org.jspecify.annotations.NullMarked; +import org.jspecify.annotations.Nullable; /** * AsyncLogger is a logger designed for high throughput and low latency logging. It does not perform any I/O in the @@ -59,6 +63,7 @@ * and they will flush to disk at the end of each batch. This means that even with immediateFlush=false, there will * never be any items left in the buffer; all log events will all be written to disk in a very efficient manner. */ +@NullMarked public class AsyncLogger extends Logger { // Implementation note: many methods in this class are tuned for performance. MODIFY WITH CARE! // Specifically, try to keep the hot methods to 35 bytecodes or less: @@ -86,8 +91,11 @@ public class AsyncLogger extends Logger { final LoggerContext context, final String name, final MessageFactory messageFactory, + final FlowMessageFactory flowMessageFactory, + final RecyclerFactory recyclerFactory, + final org.apache.logging.log4j.Logger statusLogger, final AsyncLoggerDisruptor loggerDisruptor) { - super(context, name, messageFactory); + super(context, name, messageFactory, flowMessageFactory, recyclerFactory, statusLogger); final Configuration configuration = context.getConfiguration(); this.translatorRecycler = configuration .getRecyclerFactory() @@ -107,7 +115,7 @@ public class AsyncLogger extends Logger { @Override protected void updateConfiguration(final Configuration newConfig) { nanoClock = newConfig.getNanoClock(); - includeLocation = newConfig.getLoggerConfig(name).isIncludeLocation(); + includeLocation = newConfig.getLoggerConfig(getName()).isIncludeLocation(); super.updateConfiguration(newConfig); } @@ -149,26 +157,26 @@ public void logMessage( * This re-uses a {@code RingBufferLogEventTranslator} instance cached in a {@code ThreadLocal} to avoid creating * unnecessary objects with each event. * - * @param fqcn fully qualified name of the caller - * @param location the Location of the caller. - * @param level level at which the caller wants to log the message - * @param marker message marker - * @param message the log message - * @param thrown a {@code Throwable} or {@code null} + * @param fqcn fully qualified name of the caller + * @param location the Location of the caller. + * @param level level at which the caller wants to log the message + * @param marker message marker + * @param message the log message + * @param throwable a {@code Throwable} or {@code null} */ @Override - public void log( - final Level level, - final Marker marker, + protected void doLog( final String fqcn, - final StackTraceElement location, + final @Nullable StackTraceElement location, + final Level level, + final @Nullable Marker marker, final Message message, - final Throwable thrown) { + final @Nullable Throwable throwable) { // Implementation note: this method is tuned for performance. MODIFY WITH CARE! final RingBufferLogEventTranslator translator = translatorRecycler.acquire(); try { - initTranslator(translator, fqcn, location, level, marker, message, thrown); + initTranslator(translator, fqcn, location, level, marker, message, throwable); translator.updateThreadValues(); publish(translator); } finally { @@ -220,7 +228,7 @@ private void initTranslator( translator.setBasicValues( this, - name, + getName(), marker, fqcn, level, @@ -246,7 +254,7 @@ private void initTranslator( translator.setBasicValues( this, - name, + getName(), marker, fqcn, level, diff --git a/log4j-async-logger/src/main/java/org/apache/logging/log4j/async/logger/AsyncLoggerConfig.java b/log4j-async-logger/src/main/java/org/apache/logging/log4j/async/logger/AsyncLoggerConfig.java index da36cf561aa..da022e47493 100644 --- a/log4j-async-logger/src/main/java/org/apache/logging/log4j/async/logger/AsyncLoggerConfig.java +++ b/log4j-async-logger/src/main/java/org/apache/logging/log4j/async/logger/AsyncLoggerConfig.java @@ -30,10 +30,10 @@ import org.apache.logging.log4j.core.config.LoggerConfig; import org.apache.logging.log4j.core.config.Property; import org.apache.logging.log4j.core.impl.LogEventFactory; +import org.apache.logging.log4j.kit.logger.AbstractLogger; import org.apache.logging.log4j.plugins.Configurable; import org.apache.logging.log4j.plugins.Plugin; import org.apache.logging.log4j.plugins.PluginFactory; -import org.apache.logging.log4j.spi.AbstractLogger; import org.apache.logging.log4j.util.Strings; /** diff --git a/log4j-async-logger/src/main/java/org/apache/logging/log4j/async/logger/AsyncLoggerContext.java b/log4j-async-logger/src/main/java/org/apache/logging/log4j/async/logger/AsyncLoggerContext.java index 8e1ce4290e4..bc96643c349 100644 --- a/log4j-async-logger/src/main/java/org/apache/logging/log4j/async/logger/AsyncLoggerContext.java +++ b/log4j-async-logger/src/main/java/org/apache/logging/log4j/async/logger/AsyncLoggerContext.java @@ -22,8 +22,10 @@ import org.apache.logging.log4j.core.LoggerContext; import org.apache.logging.log4j.core.config.Configuration; import org.apache.logging.log4j.core.config.DefaultConfiguration; +import org.apache.logging.log4j.message.FlowMessageFactory; import org.apache.logging.log4j.message.MessageFactory; import org.apache.logging.log4j.plugins.di.ConfigurableInstanceFactory; +import org.apache.logging.log4j.spi.recycler.RecyclerFactory; import org.apache.logging.log4j.status.StatusLogger; /** @@ -78,8 +80,15 @@ private AsyncWaitStrategyFactory createAsyncWaitStrategyFactory() { } @Override - protected Logger newInstance(final LoggerContext ctx, final String name, final MessageFactory messageFactory) { - return new AsyncLogger(ctx, name, messageFactory, loggerDisruptor); + protected Logger newInstance( + final LoggerContext ctx, + final String name, + final MessageFactory messageFactory, + final FlowMessageFactory flowMessageFactory, + final RecyclerFactory recyclerFactory, + final org.apache.logging.log4j.Logger statusLogger) { + return new AsyncLogger( + ctx, name, messageFactory, flowMessageFactory, recyclerFactory, statusLogger, loggerDisruptor); } @Override diff --git a/log4j-async-logger/src/test/java/org/apache/logging/log4j/async/logger/AsyncLoggerContextTest.java b/log4j-async-logger/src/test/java/org/apache/logging/log4j/async/logger/AsyncLoggerContextTest.java index a89108b3c0b..bba0cbd178c 100644 --- a/log4j-async-logger/src/test/java/org/apache/logging/log4j/async/logger/AsyncLoggerContextTest.java +++ b/log4j-async-logger/src/test/java/org/apache/logging/log4j/async/logger/AsyncLoggerContextTest.java @@ -22,6 +22,8 @@ import org.apache.logging.log4j.core.LoggerContext; import org.apache.logging.log4j.core.test.CoreLoggerContexts; import org.apache.logging.log4j.core.test.categories.AsyncLoggers; +import org.apache.logging.log4j.internal.recycler.DummyRecyclerFactoryProvider; +import org.apache.logging.log4j.status.StatusLogger; import org.junit.Test; import org.junit.experimental.categories.Category; @@ -30,7 +32,14 @@ public class AsyncLoggerContextTest { @Test public void testNewInstanceReturnsAsyncLogger() { - final Logger logger = new AsyncLoggerContext("a").newInstance(new LoggerContext("a"), "a", null); + final Logger logger = new AsyncLoggerContext("a") + .newInstance( + new LoggerContext("a"), + "a", + null, + null, + new DummyRecyclerFactoryProvider().createForEnvironment(null), + StatusLogger.getLogger()); assertTrue(logger instanceof AsyncLogger); CoreLoggerContexts.stopLoggerContext(); // stop async thread diff --git a/log4j-async-logger/src/test/java/org/apache/logging/log4j/async/logger/AsyncLoggerEventTranslationExceptionTest.java b/log4j-async-logger/src/test/java/org/apache/logging/log4j/async/logger/AsyncLoggerEventTranslationExceptionTest.java index a5a32b29f1a..77d1bae4ff2 100644 --- a/log4j-async-logger/src/test/java/org/apache/logging/log4j/async/logger/AsyncLoggerEventTranslationExceptionTest.java +++ b/log4j-async-logger/src/test/java/org/apache/logging/log4j/async/logger/AsyncLoggerEventTranslationExceptionTest.java @@ -28,9 +28,9 @@ import org.apache.logging.log4j.core.impl.Log4jPropertyKey; import org.apache.logging.log4j.core.test.junit.ContextSelectorType; import org.apache.logging.log4j.core.test.junit.LoggerContextSource; +import org.apache.logging.log4j.kit.logger.AbstractLogger; import org.apache.logging.log4j.message.Message; import org.apache.logging.log4j.message.ReusableSimpleMessage; -import org.apache.logging.log4j.spi.AbstractLogger; import org.junit.jupiter.api.Tag; import org.junit.jupiter.api.Test; import org.junitpioneer.jupiter.SetSystemProperty; diff --git a/log4j-core/pom.xml b/log4j-core/pom.xml index e676d00b879..ef38f7dc9d3 100644 --- a/log4j-core/pom.xml +++ b/log4j-core/pom.xml @@ -39,6 +39,7 @@ com.lmax.disruptor.*;resolution:=optional, org.apache.commons.compress.*;resolution:=optional, org.fusesource.jansi;resolution:=optional, + org.jspecify.annotations.*;resolution:=optional, java.lang.management;resolution:=optional, @@ -69,6 +70,10 @@ org.apache.logging.log4j log4j-api + + org.apache.logging.log4j + log4j-kit + org.apache.logging.log4j log4j-plugins diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/Logger.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/Logger.java index 1ab8eae227a..ccbc4a12845 100644 --- a/log4j-core/src/main/java/org/apache/logging/log4j/core/Logger.java +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/Logger.java @@ -28,12 +28,15 @@ import org.apache.logging.log4j.core.config.LoggerConfig; import org.apache.logging.log4j.core.config.ReliabilityStrategy; import org.apache.logging.log4j.core.filter.CompositeFilter; +import org.apache.logging.log4j.kit.logger.AbstractLogger; +import org.apache.logging.log4j.message.FlowMessageFactory; import org.apache.logging.log4j.message.Message; import org.apache.logging.log4j.message.MessageFactory; -import org.apache.logging.log4j.message.SimpleMessage; -import org.apache.logging.log4j.spi.AbstractLogger; +import org.apache.logging.log4j.spi.recycler.RecyclerFactory; import org.apache.logging.log4j.util.Strings; import org.apache.logging.log4j.util.Supplier; +import org.jspecify.annotations.NullMarked; +import org.jspecify.annotations.Nullable; /** * The core implementation of the {@link org.apache.logging.log4j.Logger} interface. Besides providing an implementation @@ -43,6 +46,7 @@ * unit tests or bridging legacy Log4j 1.x code. Future versions of this class may or may not include the various * methods that are noted as not being part of the public API. */ +@NullMarked public class Logger extends AbstractLogger implements Supplier { /** @@ -50,33 +54,29 @@ public class Logger extends AbstractLogger implements Supplier { */ protected volatile PrivateConfig privateConfig; - // FIXME: ditto to the above private final LoggerContext context; /** * The constructor. * * @param context The LoggerContext this Logger is associated with. - * @param messageFactory The message factory. * @param name The name of the Logger. + * @param messageFactory The message factory to use for logging methods. + * @param flowMessageFactory The flow message factory to use for flow logging methods. + * @param recyclerFactory The recycler to use for log builder instances. */ - protected Logger(final LoggerContext context, final String name, final MessageFactory messageFactory) { - super(name, messageFactory); + protected Logger( + final LoggerContext context, + final String name, + final MessageFactory messageFactory, + final FlowMessageFactory flowMessageFactory, + final RecyclerFactory recyclerFactory, + final org.apache.logging.log4j.Logger statusLogger) { + super(name, messageFactory, flowMessageFactory, recyclerFactory, statusLogger); this.context = context; privateConfig = new PrivateConfig(context.getConfiguration(), this); } - /** - * This is used to construct an InternalLoggerContext, which makes SimpleLoggerContext conmpatible with core. - * @param context the InternalLoggerContext. - * @param name the Logger name. - */ - protected Logger(final LoggerContext context, final String name) { - super(name); - this.context = context; - privateConfig = null; - } - /** * This method is only used for 1.x compatibility. Returns the parent of this Logger. If it doesn't already exist * return a temporary Logger. @@ -95,10 +95,7 @@ private Logger getParent(final PrivateConfig config) { } final String lcName = lc.getName(); final MessageFactory messageFactory = getMessageFactory(); - if (context.hasLogger(lcName, messageFactory)) { - return context.getLogger(lcName, messageFactory); - } - return new Logger(context, lcName, messageFactory); + return context.getLogger(lcName, messageFactory); } /** @@ -149,28 +146,20 @@ protected boolean requiresLocation() { } @Override - public void logMessage( - final String fqcn, final Level level, final Marker marker, final Message message, final Throwable t) { - final Message msg = message == null ? new SimpleMessage(Strings.EMPTY) : message; - final ReliabilityStrategy strategy = privateConfig.loggerConfig.getReliabilityStrategy(); - strategy.log(this, getName(), fqcn, marker, level, msg, t); - } - - @Override - protected void log( - final Level level, - final Marker marker, + protected void doLog( final String fqcn, - final StackTraceElement location, - final Message message, - final Throwable throwable) { + final @Nullable StackTraceElement location, + final Level level, + final @Nullable Marker marker, + final @Nullable Message message, + final @Nullable Throwable throwable) { final ReliabilityStrategy strategy = privateConfig.loggerConfig.getReliabilityStrategy(); strategy.log(this, getName(), fqcn, location, marker, level, message, throwable); } @Override - public boolean isEnabled(final Level level, final Marker marker, final String message, final Throwable t) { - return privateConfig.filter(level, marker, message, t); + public boolean isEnabled(final Level level, final Marker marker) { + return privateConfig.filter(level, marker, null); } @Override @@ -178,6 +167,11 @@ public boolean isEnabled(final Level level, final Marker marker, final String me return privateConfig.filter(level, marker, message); } + @Override + public boolean isEnabled(final Level level, final Marker marker, final String message, final Throwable t) { + return privateConfig.filter(level, marker, message, t); + } + @Override public boolean isEnabled(final Level level, final Marker marker, final String message, final Object... params) { return privateConfig.filter(level, marker, message, params); diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/LoggerContext.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/LoggerContext.java index ea6b92983e8..53e7b30fdaf 100644 --- a/log4j-core/src/main/java/org/apache/logging/log4j/core/LoggerContext.java +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/LoggerContext.java @@ -43,20 +43,25 @@ import org.apache.logging.log4j.core.config.Reconfigurable; import org.apache.logging.log4j.core.impl.Log4jPropertyKey; import org.apache.logging.log4j.core.util.Cancellable; +import org.apache.logging.log4j.core.util.Constants; import org.apache.logging.log4j.core.util.ExecutorServices; import org.apache.logging.log4j.core.util.NetUtils; import org.apache.logging.log4j.core.util.ShutdownCallbackRegistry; +import org.apache.logging.log4j.message.FlowMessageFactory; import org.apache.logging.log4j.message.MessageFactory; import org.apache.logging.log4j.plugins.di.ConfigurableInstanceFactory; import org.apache.logging.log4j.plugins.di.DI; import org.apache.logging.log4j.plugins.di.InstanceFactory; import org.apache.logging.log4j.plugins.di.Key; -import org.apache.logging.log4j.spi.AbstractLogger; +import org.apache.logging.log4j.spi.ExtendedLogger; import org.apache.logging.log4j.spi.LoggerContextFactory; import org.apache.logging.log4j.spi.LoggerContextShutdownAware; import org.apache.logging.log4j.spi.LoggerContextShutdownEnabled; import org.apache.logging.log4j.spi.LoggerRegistry; +import org.apache.logging.log4j.spi.LoggingSystem; import org.apache.logging.log4j.spi.Terminable; +import org.apache.logging.log4j.spi.recycler.RecyclerFactory; +import org.apache.logging.log4j.status.StatusLogger; import org.apache.logging.log4j.util.Lazy; import org.apache.logging.log4j.util.PropertiesUtil; import org.apache.logging.log4j.util.PropertyEnvironment; @@ -64,7 +69,7 @@ /** * The LoggerContext is the anchor for the logging system. It maintains a list of all the loggers requested by * applications and a reference to the Configuration. The Configuration will contain the configured loggers, appenders, - * filters, etc and will be atomically updated whenever a reconfigure occurs. + * filters, etc. and will be atomically updated whenever a reconfigure occurs. */ public class LoggerContext extends AbstractLifeCycle implements org.apache.logging.log4j.spi.LoggerContext, @@ -208,8 +213,40 @@ public LoggerContext( this.nullConfiguration = new NullConfiguration(this); } + /** + * Checks that the message factory a logger was created with is the same as the given messageFactory. If they are + * different log a warning to the {@linkplain StatusLogger}. A null MessageFactory translates to the default + * MessageFactory {@link LoggingSystem#getMessageFactory()}. + * + * @param logger The logger to check + * @param messageFactory The message factory to check. + */ + public static void checkMessageFactory(final ExtendedLogger logger, final MessageFactory messageFactory) { + final String name = logger.getName(); + final MessageFactory loggerMessageFactory = logger.getMessageFactory(); + final MessageFactory currentMessageFactory = LoggingSystem.getMessageFactory(); + if (messageFactory != null && !loggerMessageFactory.equals(messageFactory)) { + StatusLogger.getLogger() + .warn( + "The Logger {} was created with the message factory {} and is now requested with the " + + "message factory {}, which may create log events with unexpected formatting.", + name, + loggerMessageFactory, + messageFactory); + } else if (messageFactory == null && loggerMessageFactory != currentMessageFactory) { + StatusLogger.getLogger() + .warn( + "The Logger {} was created with the message factory {} and is now requested with a null " + + "message factory (defaults to {}), which may create log events with unexpected " + + "formatting.", + name, + loggerMessageFactory, + currentMessageFactory.getClass().getName()); + } + } + private void initializeInstanceFactory() { - final var ref = Lazy.weak(this); + final Lazy ref = Lazy.weak(this); instanceFactory.registerBinding(KEY, ref); instanceFactory.registerInstancePostProcessor(new LoggerContextAwarePostProcessor(this)); } @@ -223,10 +260,12 @@ public PropertyEnvironment getProperties() { return properties; } + @Override public void addShutdownListener(final LoggerContextShutdownAware listener) { listeners.get().add(listener); } + @Override public List getListeners() { return listeners.get(); } @@ -250,8 +289,8 @@ public List getListeners() { * @see LogManager#getContext() */ public static LoggerContext getContext() { - final var context = LogManager.getContext(); - if (context instanceof LoggerContext ctx) { + final org.apache.logging.log4j.spi.LoggerContext context = LogManager.getContext(); + if (context instanceof final LoggerContext ctx) { return ctx; } throw new IllegalStateException( @@ -276,8 +315,8 @@ public static LoggerContext getContext() { * @see LogManager#getContext(boolean) */ public static LoggerContext getContext(final boolean currentContext) { - final var context = LogManager.getContext(currentContext); - if (context instanceof LoggerContext ctx) { + final org.apache.logging.log4j.spi.LoggerContext context = LogManager.getContext(currentContext); + if (context instanceof final LoggerContext ctx) { return ctx; } throw new IllegalStateException( @@ -306,8 +345,9 @@ public static LoggerContext getContext(final boolean currentContext) { */ public static LoggerContext getContext( final ClassLoader loader, final boolean currentContext, final URI configLocation) { - final var context = LogManager.getContext(loader, currentContext, configLocation); - if (context instanceof LoggerContext ctx) { + final org.apache.logging.log4j.spi.LoggerContext context = + LogManager.getContext(loader, currentContext, configLocation); + if (context instanceof final LoggerContext ctx) { return ctx; } throw new IllegalStateException( @@ -374,7 +414,6 @@ private void setUpShutdownHook() { this.shutdownCallback = ((ShutdownCallbackRegistry) factory).addShutdownCallback(new Runnable() { @Override public void run() { - @SuppressWarnings("resource") final LoggerContext context = LoggerContext.this; LOGGER.debug(SHUTDOWN_HOOK_MARKER, "Stopping {}", context); context.stop(shutdownTimeoutMillis, TimeUnit.MILLISECONDS); @@ -576,13 +615,18 @@ public Logger getLogger(final String name, final MessageFactory messageFactory) // Note: This is the only method where we add entries to the 'loggerRegistry' ivar. Logger logger = loggerRegistry.getLogger(name, messageFactory); if (logger != null) { - AbstractLogger.checkMessageFactory(logger, messageFactory); + checkMessageFactory(logger, messageFactory); return logger; } - - logger = newInstance(this, name, messageFactory); - loggerRegistry.putIfAbsent(name, messageFactory, logger); - return loggerRegistry.getLogger(name, messageFactory); + final MessageFactory actualMessageFactory = + messageFactory != null ? messageFactory : instanceFactory.getInstance(MessageFactory.class); + final FlowMessageFactory flowMessageFactory = instanceFactory.getInstance(FlowMessageFactory.class); + final RecyclerFactory recyclerFactory = instanceFactory.getInstance(RecyclerFactory.class); + final org.apache.logging.log4j.Logger statusLogger = + instanceFactory.getInstance(Constants.DEFAULT_STATUS_LOGGER_KEY); + logger = newInstance(this, name, actualMessageFactory, flowMessageFactory, recyclerFactory, statusLogger); + loggerRegistry.putIfAbsent(name, actualMessageFactory, logger); + return loggerRegistry.getLogger(name, actualMessageFactory); } /** @@ -591,6 +635,7 @@ public Logger getLogger(final String name, final MessageFactory messageFactory) * @return the LoggerRegistry. * @since 2.17.2 */ + @Override public LoggerRegistry getLoggerRegistry() { return loggerRegistry; } @@ -936,8 +981,14 @@ public String toString() { } // LOG4J2-151: changed visibility from private to protected - protected Logger newInstance(final LoggerContext ctx, final String name, final MessageFactory messageFactory) { - return new Logger(ctx, name, messageFactory); + protected Logger newInstance( + final LoggerContext ctx, + final String name, + final MessageFactory messageFactory, + final FlowMessageFactory flowMessageFactory, + final RecyclerFactory recyclerFactory, + final org.apache.logging.log4j.Logger statusLogger) { + return new Logger(ctx, name, messageFactory, flowMessageFactory, recyclerFactory, statusLogger); } /** diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/AsyncAppender.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/AsyncAppender.java index a8c41a6fc3f..5b15a9073ad 100644 --- a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/AsyncAppender.java +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/AsyncAppender.java @@ -40,6 +40,7 @@ import org.apache.logging.log4j.core.config.Property; import org.apache.logging.log4j.core.config.plugins.PluginConfiguration; import org.apache.logging.log4j.core.filter.AbstractFilterable; +import org.apache.logging.log4j.kit.logger.AbstractLogger; import org.apache.logging.log4j.plugins.Configurable; import org.apache.logging.log4j.plugins.Factory; import org.apache.logging.log4j.plugins.Plugin; @@ -47,7 +48,6 @@ import org.apache.logging.log4j.plugins.PluginBuilderAttribute; import org.apache.logging.log4j.plugins.PluginElement; import org.apache.logging.log4j.plugins.validation.constraints.Required; -import org.apache.logging.log4j.spi.AbstractLogger; import org.apache.logging.log4j.util.InternalApi; /** diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/impl/DefaultBundle.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/impl/DefaultBundle.java index 7305d15047d..102a585bcf6 100644 --- a/log4j-core/src/main/java/org/apache/logging/log4j/core/impl/DefaultBundle.java +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/impl/DefaultBundle.java @@ -19,6 +19,7 @@ import java.util.Map; import java.util.function.Supplier; import org.apache.logging.log4j.Level; +import org.apache.logging.log4j.Logger; import org.apache.logging.log4j.ThreadContext; import org.apache.logging.log4j.core.ContextDataInjector; import org.apache.logging.log4j.core.config.ConfigurationFactory; @@ -36,6 +37,8 @@ import org.apache.logging.log4j.core.time.internal.DummyNanoClock; import org.apache.logging.log4j.core.util.DefaultShutdownCallbackRegistry; import org.apache.logging.log4j.core.util.ShutdownCallbackRegistry; +import org.apache.logging.log4j.message.FlowMessageFactory; +import org.apache.logging.log4j.message.MessageFactory; import org.apache.logging.log4j.plugins.Factory; import org.apache.logging.log4j.plugins.Named; import org.apache.logging.log4j.plugins.Namespace; @@ -46,6 +49,7 @@ import org.apache.logging.log4j.spi.LoggingSystem; import org.apache.logging.log4j.spi.ReadOnlyThreadContextMap; import org.apache.logging.log4j.spi.recycler.RecyclerFactory; +import org.apache.logging.log4j.status.StatusLogger; /** * Provides instance binding defaults. @@ -62,6 +66,16 @@ */ public class DefaultBundle { + @SingletonFactory + public MessageFactory defaultMessageFactory() { + return LoggingSystem.getMessageFactory(); + } + + @SingletonFactory + public FlowMessageFactory defaultFlowMessageFactory() { + return LoggingSystem.getFlowMessageFactory(); + } + @SingletonFactory public RecyclerFactory defaultRecyclerFactory() { return LoggingSystem.getRecyclerFactory(); @@ -143,4 +157,11 @@ public MergeStrategy defaultMergeStrategy() { public Level defaultStatusLevel() { return Level.ERROR; } + + @SingletonFactory + @Named("StatusLogger") + @ConditionalOnMissingBinding + public Logger defaultStatusLogger() { + return StatusLogger.getLogger(); + } } diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/impl/internal/InternalLoggerContext.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/impl/internal/InternalLoggerContext.java index 39b3a852765..5e02eb89b40 100644 --- a/log4j-core/src/main/java/org/apache/logging/log4j/core/impl/internal/InternalLoggerContext.java +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/impl/internal/InternalLoggerContext.java @@ -29,27 +29,45 @@ import org.apache.logging.log4j.core.LoggerContext; import org.apache.logging.log4j.core.config.Configuration; import org.apache.logging.log4j.core.config.LoggerConfig; +import org.apache.logging.log4j.message.FlowMessageFactory; import org.apache.logging.log4j.message.Message; import org.apache.logging.log4j.message.MessageFactory; import org.apache.logging.log4j.spi.ExtendedLogger; +import org.apache.logging.log4j.spi.LoggingSystem; +import org.apache.logging.log4j.spi.recycler.RecyclerFactory; +import org.apache.logging.log4j.status.StatusLogger; +import org.jspecify.annotations.NullMarked; +import org.jspecify.annotations.Nullable; /** * Creates a SimpleLoggerContext compatible with log4j-core. This class is internal to Log4j. */ +@NullMarked public class InternalLoggerContext extends LoggerContext { - private final org.apache.logging.log4j.spi.LoggerContext parentLoggerContext; - private static final LoggerConfig LOGGER_CONFIG = new LoggerConfig.RootLogger(); + private final org.apache.logging.log4j.spi.LoggerContext parentLoggerContext; + private final MessageFactory defaultMessageFactory; + private final FlowMessageFactory defaultFlowMessageFactory; + private final RecyclerFactory recyclerFactory; + public InternalLoggerContext(org.apache.logging.log4j.spi.LoggerContext loggerContext) { - super(); this.parentLoggerContext = loggerContext; + this.defaultMessageFactory = LoggingSystem.getMessageFactory(); + this.defaultFlowMessageFactory = LoggingSystem.getFlowMessageFactory(); + this.recyclerFactory = LoggingSystem.getRecyclerFactory(); setStarted(); } @Override - protected Logger newInstance(final LoggerContext ctx, final String name, final MessageFactory messageFactory) { + protected Logger newInstance( + final LoggerContext ctx, + final String name, + final MessageFactory messageFactory, + final FlowMessageFactory flowMessageFactory, + final RecyclerFactory recyclerFactory, + final org.apache.logging.log4j.Logger statusLogger) { return new InternalLogger(this, name); } @@ -62,8 +80,14 @@ private class InternalLogger extends Logger { private final ExtendedLogger logger; private final InternalLoggerContext loggerContext; - public InternalLogger(InternalLoggerContext loggerContext, String name) { - super(loggerContext, name); + public InternalLogger(final InternalLoggerContext loggerContext, final String name) { + super( + loggerContext, + name, + defaultMessageFactory, + defaultFlowMessageFactory, + recyclerFactory, + StatusLogger.getLogger()); this.loggerContext = loggerContext; this.logger = parentLoggerContext.getLogger(name); } @@ -92,16 +116,13 @@ protected boolean requiresLocation() { } @Override - public void logMessage(String fqcn, Level level, Marker marker, Message message, Throwable t) {} - - @Override - protected void log( - Level level, - Marker marker, - String fqcn, - StackTraceElement location, - Message message, - Throwable throwable) { + protected void doLog( + final String fqcn, + @Nullable final StackTraceElement location, + final Level level, + @Nullable final Marker marker, + final Message message, + @Nullable final Throwable throwable) { logger.log(level, marker, message, throwable); } diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/util/Constants.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/util/Constants.java index f0aef69707e..e329270c0ae 100644 --- a/log4j-core/src/main/java/org/apache/logging/log4j/core/util/Constants.java +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/util/Constants.java @@ -17,6 +17,7 @@ package org.apache.logging.log4j.core.util; import org.apache.logging.log4j.Level; +import org.apache.logging.log4j.Logger; import org.apache.logging.log4j.core.impl.Log4jPropertyKey; import org.apache.logging.log4j.plugins.Named; import org.apache.logging.log4j.plugins.di.Key; @@ -50,6 +51,9 @@ private static boolean isJndiEnabled(final PropertyKey key) { public static final Key DEFAULT_STATUS_LEVEL_KEY = new @Named("StatusLogger") Key<>() {}; + public static final Key DEFAULT_STATUS_LOGGER_KEY = + Key.builder(Logger.class).get().withName("StatusLogger").withQualifierType(Named.class); + /** * JNDI context name string literal. */ diff --git a/log4j-kit/pom.xml b/log4j-kit/pom.xml new file mode 100644 index 00000000000..02db7e75be6 --- /dev/null +++ b/log4j-kit/pom.xml @@ -0,0 +1,70 @@ + + + + 4.0.0 + + org.apache.logging.log4j + log4j + ${revision} + ../log4j-parent + + + log4j-kit + Apache Log4j Kit + Helpers to implement Log4j 2.x API. + + + + + org.jspecify.annotations.*;resolution:=optional + + + + + + + org.jspecify + jspecify + provided + + + + org.apache.logging.log4j + log4j-api + + + + org.assertj + assertj-core + test + + + + org.junit.jupiter + junit-jupiter-api + test + + + + org.javassist + javassist + 3.29.2-GA + test + + + diff --git a/log4j-kit/src/main/java/org/apache/logging/log4j/kit/logger/AbstractLogger.java b/log4j-kit/src/main/java/org/apache/logging/log4j/kit/logger/AbstractLogger.java new file mode 100644 index 00000000000..911730ceb3c --- /dev/null +++ b/log4j-kit/src/main/java/org/apache/logging/log4j/kit/logger/AbstractLogger.java @@ -0,0 +1,3955 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to you under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.logging.log4j.kit.logger; + +import org.apache.logging.log4j.Level; +import org.apache.logging.log4j.LogBuilder; +import org.apache.logging.log4j.Logger; +import org.apache.logging.log4j.LoggingException; +import org.apache.logging.log4j.Marker; +import org.apache.logging.log4j.MarkerManager; +import org.apache.logging.log4j.kit.logger.internal.DefaultLogBuilder; +import org.apache.logging.log4j.message.EntryMessage; +import org.apache.logging.log4j.message.FlowMessageFactory; +import org.apache.logging.log4j.message.Message; +import org.apache.logging.log4j.message.MessageFactory; +import org.apache.logging.log4j.message.StringFormattedMessage; +import org.apache.logging.log4j.spi.ExtendedLogger; +import org.apache.logging.log4j.spi.recycler.Recycler; +import org.apache.logging.log4j.spi.recycler.RecyclerFactory; +import org.apache.logging.log4j.util.LambdaUtil; +import org.apache.logging.log4j.util.MessageSupplier; +import org.apache.logging.log4j.util.PerformanceSensitive; +import org.apache.logging.log4j.util.StackLocatorUtil; +import org.apache.logging.log4j.util.Supplier; +import org.jspecify.annotations.NullMarked; +import org.jspecify.annotations.Nullable; + +/** + * Base implementation of a Logger. + *

+ * It is highly recommended that any Logger implementation extend this class. + *

+ *

Implementation details

+ *

Control flow

+ *

The typical control flow of a log message inside this class is:

+ *
    + *
  1. Methods from the {@link Logger} interface call location-aware methods.
  2. + *
  3. + * Location-aware methods (mostly in the {@link ExtendedLogger} interface) have a {@code fqcn} parameter to + * allow logging bridge developers to provide fully qualified class name of the logger entry point, used to + * determine the caller class and method when location information needs to be logged. + *
  4. + *
  5. Filters methods are evaluated to check if the message should be logged.
  6. + *
  7. If the user didn't supply a {@link Message} parameter, a message factory is called.
  8. + *
  9. The {@link #logMessageSafely} method is invoked, which handles recursion and exceptions.
  10. + *
  11. Control is passed to the abstract {@link #doLog} method.
  12. + *
+ *

Performance

+ *

+ * Most methods in this class are tuned for performance. Specifically, try to keep the hot methods to 35 + * bytecodes or less: this is within the MaxInlineSize threshold on Java 7 and Java 8 Hotspot and makes these + * methods candidates for immediate inlining instead of waiting until they are designated "hot enough". + *

+ */ +@NullMarked +public abstract class AbstractLogger implements ExtendedLogger { + + /** + * Marker for flow tracing. + */ + public static final Marker FLOW_MARKER = MarkerManager.getMarker("FLOW"); + + /** + * Marker for method entry tracing. + */ + public static final Marker ENTRY_MARKER = MarkerManager.getMarker("ENTER").setParents(FLOW_MARKER); + + /** + * Marker for method exit tracing. + */ + public static final Marker EXIT_MARKER = MarkerManager.getMarker("EXIT").setParents(FLOW_MARKER); + + /** + * Marker for exception tracing. + */ + public static final Marker EXCEPTION_MARKER = MarkerManager.getMarker("EXCEPTION"); + + /** + * Marker for throwing exceptions. + */ + public static final Marker THROWING_MARKER = + MarkerManager.getMarker("THROWING").setParents(EXCEPTION_MARKER); + + /** + * Marker for catching exceptions. + */ + public static final Marker CATCHING_MARKER = + MarkerManager.getMarker("CATCHING").setParents(EXCEPTION_MARKER); + + private static final String FQCN = AbstractLogger.class.getName(); + private static final String THROWING = "Throwing"; + private static final String CATCHING = "Catching"; + private static final Object[] EMPTY_PARAMS = new Object[0]; + private static final ThreadLocal recursionDepthHolder = new ThreadLocal<>(); // LOG4J2-1518, LOG4J2-2031 + + private final String name; + private final MessageFactory messageFactory; + private final FlowMessageFactory flowMessageFactory; + private final Recycler recycler; + private final Logger statusLogger; + + /** + * @param name The name of the logger. + * @param messageFactory The message factory to use for logging methods. + * @param flowMessageFactory The flow message factory to use for flow logging methods. + * @param recyclerFactory The recycler to use for log builder instances. + */ + protected AbstractLogger( + final String name, + final MessageFactory messageFactory, + final FlowMessageFactory flowMessageFactory, + final RecyclerFactory recyclerFactory, + final Logger statusLogger) { + this.name = name; + this.messageFactory = messageFactory; + this.flowMessageFactory = flowMessageFactory; + this.recycler = recyclerFactory.create(DefaultLogBuilder::new); + this.statusLogger = statusLogger; + } + + private static void incrementRecursionDepth() { + getRecursionDepthHolder()[0]++; + } + + private static void decrementRecursionDepth() { + final int newDepth = --getRecursionDepthHolder()[0]; + if (newDepth < 0) { + throw new IllegalStateException("Recursion depth became negative: " + newDepth); + } + } + + /** + * @implNote This method is used by all the other filtering methods. + */ + @Override + public abstract boolean isEnabled(Level level, @Nullable Marker marker); + + /** + * Performs the actual logging + * + * @param fqcn The fully qualified class name of the entry point to the log system, which can be used to + * determine the location of the caller. + * @param location The location of the caller, if provided by the user or {@code null} otherwise. + * @param level The level of the log message. + * @param marker The marker of the log message or {@code null}. + * @param message The message to be logged. + * @param throwable The exception associated to the message or {@code null}. + */ + protected abstract void doLog( + String fqcn, + @Nullable StackTraceElement location, + Level level, + @Nullable Marker marker, + @Nullable Message message, + @Nullable Throwable throwable); + + /** + * Returns a log builder that logs at the specified level. + * + * @since 2.20.0 + */ + protected LogBuilder getLogBuilder(final Level level) { + final DefaultLogBuilder builder = recycler.acquire(); + return builder.reset(this, level); + } + + /** + * Returns the depth of nested logging calls in the current Thread: zero if no logging call has been made, + * one if a single logging call without nested logging calls has been made, or more depending on the level of + * nesting. + * @return the depth of the nested logging calls in the current Thread + */ + public static int getRecursionDepth() { + return getRecursionDepthHolder()[0]; + } + + private static int[] getRecursionDepthHolder() { + int[] result = recursionDepthHolder.get(); + if (result == null) { + result = new int[1]; + recursionDepthHolder.set(result); + } + return result; + } + + @PerformanceSensitive + // NOTE: This is a hot method. Current implementation compiles to 30 bytes of byte code. + // This is within the 35 byte MaxInlineSize threshold. Modify with care! + private void logMessageSafely( + final String fqcn, + final @Nullable StackTraceElement location, + final Level level, + final @Nullable Marker marker, + final @Nullable Message message, + final @Nullable Throwable throwable) { + try { + logMessageTrackRecursion(fqcn, location, level, marker, message, throwable); + } finally { + // LOG4J2-1583 prevent scrambled logs when logging calls are nested (logging in toString()) + recycle(message); + } + } + + @PerformanceSensitive + // NOTE: This is a hot method. Current implementation compiles to 33 bytes of byte code. + // This is within the 35 byte MaxInlineSize threshold. Modify with care! + private void logMessageTrackRecursion( + final String fqcn, + final @Nullable StackTraceElement location, + final Level level, + final @Nullable Marker marker, + final @Nullable Message message, + final @Nullable Throwable throwable) { + try { + incrementRecursionDepth(); // LOG4J2-1518, LOG4J2-2031 + tryLogMessage(fqcn, location, level, marker, message, throwable); + } finally { + decrementRecursionDepth(); + } + } + + @PerformanceSensitive + // NOTE: This is a hot method. Current implementation compiles to 15 bytes of byte code. + // This is within the 35 byte MaxInlineSize threshold. Modify with care! + private @Nullable StackTraceElement getLocation(final String fqcn, final @Nullable StackTraceElement location) { + return location != null ? location : requiresLocation() ? StackLocatorUtil.calcLocation(fqcn) : null; + } + + @PerformanceSensitive + // NOTE: This is a hot method. Current implementation compiles to 33 bytes of byte code. + // This is within the 35 byte MaxInlineSize threshold. Modify with care! + private void recycle(final @Nullable Message message) { + messageFactory.recycle(message); + } + + @PerformanceSensitive + // NOTE: This is a hot method. Current implementation compiles to 26 bytes of byte code. + // This is within the 35 byte MaxInlineSize threshold. Modify with care! + private void tryLogMessage( + final String fqcn, + final @Nullable StackTraceElement location, + final Level level, + final @Nullable Marker marker, + final @Nullable Message message, + final @Nullable Throwable throwable) { + try { + doLog(fqcn, getLocation(fqcn, location), level, marker, message, throwable); + } catch (final Throwable t) { + // LOG4J2-1990 Log4j2 suppresses all exceptions that occur once application called the logger + handleLogMessageException(t, fqcn, message); + } + } + + // LOG4J2-1990 Log4j2 suppresses all exceptions that occur once application called the logger + // TODO Configuration setting to propagate exceptions back to the caller *if requested* + private void handleLogMessageException( + final Throwable throwable, final String fqcn, final @Nullable Message message) { + if (throwable instanceof LoggingException) { + throw (LoggingException) throwable; + } + statusLogger.warn( + "{} caught {} logging {}: {}", + fqcn, + throwable.getClass().getName(), + message != null ? message.getClass().getSimpleName() : null, + message != null ? message.getFormat() : null, + throwable); + } + + protected boolean requiresLocation() { + return false; + } + + // + // Methods that always log a message regardless of the current logger level. + + // + @PerformanceSensitive + protected void logMessage( + final String fqcn, + final Level level, + final @Nullable Marker marker, + final CharSequence message, + final @Nullable Throwable throwable) { + final Message msg = messageFactory.newMessage(message); + logMessageSafely(fqcn, null, level, marker, msg, throwable); + } + + @PerformanceSensitive + protected void logMessage( + final String fqcn, + final Level level, + final @Nullable Marker marker, + final Object message, + final @Nullable Throwable throwable) { + final Message msg = messageFactory.newMessage(message); + logMessageSafely(fqcn, null, level, marker, msg, throwable); + } + + @SuppressWarnings("deprecation") + protected void logMessage( + final String fqcn, + final Level level, + final @Nullable Marker marker, + final MessageSupplier messageSupplier, + final @Nullable Throwable throwable) { + final Message msg = LambdaUtil.get(messageSupplier); + final Throwable effectiveThrowable = (throwable == null && msg != null) ? msg.getThrowable() : throwable; + logMessageSafely(fqcn, null, level, marker, msg, effectiveThrowable); + } + + @SuppressWarnings("deprecation") + protected void logMessage( + final String fqcn, + final Level level, + final @Nullable Marker marker, + final Supplier messageSupplier, + final @Nullable Throwable throwable) { + final Message msg = LambdaUtil.getMessage(messageSupplier, messageFactory); + final Throwable effectiveThrowable = (throwable == null && msg != null) ? msg.getThrowable() : throwable; + logMessageSafely(fqcn, null, level, marker, msg, effectiveThrowable); + } + + @PerformanceSensitive + protected void logMessage( + final String fqcn, + final Level level, + final @Nullable Marker marker, + final String message, + final @Nullable Throwable throwable) { + final Message msg = messageFactory.newMessage(message); + logMessageSafely(fqcn, null, level, marker, msg, throwable); + } + + @PerformanceSensitive + protected void logMessage( + final String fqcn, final Level level, final @Nullable Marker marker, final String message) { + final Message msg = messageFactory.newMessage(message); + logMessageSafely(fqcn, null, level, marker, msg, msg.getThrowable()); + } + + @PerformanceSensitive + protected void logMessage( + final String fqcn, + final Level level, + final @Nullable Marker marker, + final String message, + final Object p0) { + final Message msg = messageFactory.newMessage(message, p0); + logMessageSafely(fqcn, null, level, marker, msg, msg.getThrowable()); + } + + @PerformanceSensitive + protected void logMessage( + final String fqcn, + final Level level, + final @Nullable Marker marker, + final String message, + final Object p0, + final Object p1) { + final Message msg = messageFactory.newMessage(message, p0, p1); + logMessageSafely(fqcn, null, level, marker, msg, msg.getThrowable()); + } + + protected void logMessage( + final String fqcn, + final Level level, + final @Nullable Marker marker, + final String message, + final Object p0, + final Object p1, + final Object p2) { + final Message msg = messageFactory.newMessage(message, p0, p1, p2); + logMessageSafely(fqcn, null, level, marker, msg, msg.getThrowable()); + } + + protected void logMessage( + final String fqcn, + final Level level, + final @Nullable Marker marker, + final String message, + final Object p0, + final Object p1, + final Object p2, + final Object p3) { + final Message msg = messageFactory.newMessage(message, p0, p1, p2, p3); + logMessageSafely(fqcn, null, level, marker, msg, msg.getThrowable()); + } + + protected void logMessage( + final String fqcn, + final Level level, + final @Nullable Marker marker, + final String message, + final Object p0, + final Object p1, + final Object p2, + final Object p3, + final Object p4) { + final Message msg = messageFactory.newMessage(message, p0, p1, p2, p3, p4); + logMessageSafely(fqcn, null, level, marker, msg, msg.getThrowable()); + } + + protected void logMessage( + final String fqcn, + final Level level, + final @Nullable Marker marker, + final String message, + final Object p0, + final Object p1, + final Object p2, + final Object p3, + final Object p4, + final Object p5) { + final Message msg = messageFactory.newMessage(message, p0, p1, p2, p3, p4, p5); + logMessageSafely(fqcn, null, level, marker, msg, msg.getThrowable()); + } + + protected void logMessage( + final String fqcn, + final Level level, + final @Nullable Marker marker, + final String message, + final Object p0, + final Object p1, + final Object p2, + final Object p3, + final Object p4, + final Object p5, + final Object p6) { + final Message msg = messageFactory.newMessage(message, p0, p1, p2, p3, p4, p5, p6); + logMessageSafely(fqcn, null, level, marker, msg, msg.getThrowable()); + } + + protected void logMessage( + final String fqcn, + final Level level, + final @Nullable Marker marker, + final String message, + final Object p0, + final Object p1, + final Object p2, + final Object p3, + final Object p4, + final Object p5, + final Object p6, + final Object p7) { + final Message msg = messageFactory.newMessage(message, p0, p1, p2, p3, p4, p5, p6, p7); + logMessageSafely(fqcn, null, level, marker, msg, msg.getThrowable()); + } + + protected void logMessage( + final String fqcn, + final Level level, + final @Nullable Marker marker, + final String message, + final Object p0, + final Object p1, + final Object p2, + final Object p3, + final Object p4, + final Object p5, + final Object p6, + final Object p7, + final Object p8) { + final Message msg = messageFactory.newMessage(message, p0, p1, p2, p3, p4, p5, p6, p7, p8); + logMessageSafely(fqcn, null, level, marker, msg, msg.getThrowable()); + } + + protected void logMessage( + final String fqcn, + final Level level, + final @Nullable Marker marker, + final String message, + final Object p0, + final Object p1, + final Object p2, + final Object p3, + final Object p4, + final Object p5, + final Object p6, + final Object p7, + final Object p8, + final Object p9) { + final Message msg = messageFactory.newMessage(message, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9); + logMessageSafely(fqcn, null, level, marker, msg, msg.getThrowable()); + } + + @SuppressWarnings("deprecation") + protected void logMessage( + final String fqcn, + final Level level, + final @Nullable Marker marker, + final String message, + final Supplier... paramSuppliers) { + final Message msg = messageFactory.newMessage(message, LambdaUtil.getAll(paramSuppliers)); + logMessageSafely(fqcn, null, level, marker, msg, msg.getThrowable()); + } + + @PerformanceSensitive + protected void logMessage( + final String fqcn, + final Level level, + final @Nullable Marker marker, + final String message, + final Object... params) { + final Message msg = messageFactory.newMessage(message, params); + logMessageSafely(fqcn, null, level, marker, msg, msg.getThrowable()); + } + // + + // + protected @Nullable EntryMessage logEnterMessage( + final String fqcn, final @Nullable String format, final @Nullable Object... params) { + final EntryMessage entryMessage = flowMessageFactory.newEntryMessage(format, params); + logMessageSafely(fqcn, null, Level.TRACE, ENTRY_MARKER, entryMessage, null); + return entryMessage; + } + + protected @Nullable EntryMessage logEnterMessage(final String fqcn, final @Nullable Message message) { + final EntryMessage entryMessage = flowMessageFactory.newEntryMessage(message); + logMessageSafely(fqcn, null, Level.TRACE, ENTRY_MARKER, entryMessage, null); + return entryMessage; + } + + protected void logExitMessage( + final String fqcn, final @Nullable EntryMessage message, final @Nullable Object result) { + logMessageSafely( + fqcn, null, Level.TRACE, EXIT_MARKER, flowMessageFactory.newExitMessage(result, message), null); + } + + protected void logExitMessage(final String fqcn, final @Nullable Message message, final @Nullable Object result) { + logMessageSafely( + fqcn, null, Level.TRACE, EXIT_MARKER, flowMessageFactory.newExitMessage(result, message), null); + } + + protected void logExitMessage(final String fqcn, final @Nullable String format, final @Nullable Object result) { + logMessageSafely(fqcn, null, Level.TRACE, EXIT_MARKER, flowMessageFactory.newExitMessage(format, result), null); + } + // + + // + protected void logCatchingMessage(final String fqcn, final Level level, final @Nullable Throwable throwable) { + logMessageSafely(fqcn, null, level, CATCHING_MARKER, messageFactory.newMessage(CATCHING), throwable); + } + + protected void logPrintfMessage( + final String fqcn, + final Level level, + final @Nullable Marker marker, + final String format, + final Object... params) { + final Message message = new StringFormattedMessage(format, params); + logMessageSafely(fqcn, null, level, marker, message, message.getThrowable()); + } + + protected void logThrowingMessage(final String fqcn, final Level level, final Throwable throwable) { + logMessageSafely(fqcn, null, level, THROWING_MARKER, messageFactory.newMessage(THROWING), throwable); + } + // + + // + + // + @Override + public boolean isDebugEnabled() { + return isEnabled(Level.DEBUG); + } + + @Override + public boolean isDebugEnabled(final @Nullable Marker marker) { + return isEnabled(Level.DEBUG, marker); + } + + @Override + public boolean isEnabled(final Level level) { + return isEnabled(level, null); + } + + @Override + public boolean isEnabled( + final Level level, + final @Nullable Marker marker, + final @Nullable Message message, + final @Nullable Throwable throwable) { + return isEnabled(level, marker); + } + + @Override + public boolean isEnabled( + final Level level, + final @Nullable Marker marker, + final CharSequence message, + final @Nullable Throwable throwable) { + return isEnabled(level, marker); + } + + @Override + public boolean isEnabled( + final Level level, + final @Nullable Marker marker, + final Object message, + final @Nullable Throwable throwable) { + return isEnabled(level, marker); + } + + @Override + public boolean isEnabled( + final Level level, + final @Nullable Marker marker, + final String message, + final @Nullable Throwable throwable) { + return isEnabled(level, marker); + } + + @Override + public boolean isEnabled(final Level level, final @Nullable Marker marker, final String message) { + return isEnabled(level, marker); + } + + @Override + public boolean isEnabled( + final Level level, final @Nullable Marker marker, final String message, final Object... params) { + return isEnabled(level, marker); + } + + @Override + public boolean isEnabled(final Level level, final @Nullable Marker marker, final String message, final Object p0) { + return isEnabled(level, marker); + } + + @Override + public boolean isEnabled( + final Level level, final @Nullable Marker marker, final String message, final Object p0, final Object p1) { + return isEnabled(level, marker); + } + + @Override + public boolean isEnabled( + final Level level, + final @Nullable Marker marker, + final String message, + final Object p0, + final Object p1, + final Object p2) { + return isEnabled(level, marker); + } + + @Override + public boolean isEnabled( + final Level level, + final @Nullable Marker marker, + final String message, + final Object p0, + final Object p1, + final Object p2, + final Object p3) { + return isEnabled(level, marker); + } + + @Override + public boolean isEnabled( + final Level level, + final @Nullable Marker marker, + final String message, + final Object p0, + final Object p1, + final Object p2, + final Object p3, + final Object p4) { + return isEnabled(level, marker); + } + + @Override + public boolean isEnabled( + final Level level, + final @Nullable Marker marker, + final String message, + final Object p0, + final Object p1, + final Object p2, + final Object p3, + final Object p4, + final Object p5) { + return isEnabled(level, marker); + } + + @Override + public boolean isEnabled( + final Level level, + final @Nullable Marker marker, + final String message, + final Object p0, + final Object p1, + final Object p2, + final Object p3, + final Object p4, + final Object p5, + final Object p6) { + return isEnabled(level, marker); + } + + @Override + public boolean isEnabled( + final Level level, + final @Nullable Marker marker, + final String message, + final Object p0, + final Object p1, + final Object p2, + final Object p3, + final Object p4, + final Object p5, + final Object p6, + final Object p7) { + return isEnabled(level, marker); + } + + @Override + public boolean isEnabled( + final Level level, + final @Nullable Marker marker, + final String message, + final Object p0, + final Object p1, + final Object p2, + final Object p3, + final Object p4, + final Object p5, + final Object p6, + final Object p7, + final Object p8) { + return isEnabled(level, marker); + } + + @Override + public boolean isEnabled( + final Level level, + final @Nullable Marker marker, + final String message, + final Object p0, + final Object p1, + final Object p2, + final Object p3, + final Object p4, + final Object p5, + final Object p6, + final Object p7, + final Object p8, + final Object p9) { + return isEnabled(level, marker); + } + + @Override + public boolean isErrorEnabled() { + return isEnabled(Level.ERROR); + } + + @Override + public boolean isErrorEnabled(final @Nullable Marker marker) { + return isEnabled(Level.ERROR, marker); + } + + @Override + public boolean isFatalEnabled() { + return isEnabled(Level.FATAL); + } + + @Override + public boolean isFatalEnabled(final @Nullable Marker marker) { + return isEnabled(Level.FATAL, marker); + } + + @Override + public boolean isInfoEnabled() { + return isEnabled(Level.INFO); + } + + @Override + public boolean isInfoEnabled(final @Nullable Marker marker) { + return isEnabled(Level.INFO, marker); + } + + @Override + public boolean isTraceEnabled() { + return isEnabled(Level.TRACE); + } + + @Override + public boolean isTraceEnabled(final @Nullable Marker marker) { + return isEnabled(Level.TRACE, marker); + } + + @Override + public boolean isWarnEnabled() { + return isEnabled(Level.WARN); + } + + @Override + public boolean isWarnEnabled(final @Nullable Marker marker) { + return isEnabled(Level.WARN, marker); + } + // + + // + + // + // These methods are part of `ExtendedLogger`. + @Override + @PerformanceSensitive + public void logIfEnabled( + final String fqcn, + final Level level, + final @Nullable Marker marker, + final @Nullable Message message, + final @Nullable Throwable throwable) { + if (isEnabled(level, marker, message, throwable)) { + logMessageSafely(fqcn, null, level, marker, message, throwable); + } + } + + @Override + @SuppressWarnings("deprecation") + @PerformanceSensitive + public void logIfEnabled( + final String fqcn, + final Level level, + final @Nullable Marker marker, + final MessageSupplier messageSupplier, + final @Nullable Throwable throwable) { + if (isEnabled(level, marker, messageSupplier, throwable)) { + logMessage(fqcn, level, marker, messageSupplier, throwable); + } + } + + @Override + @PerformanceSensitive + public void logIfEnabled( + final String fqcn, + final Level level, + final @Nullable Marker marker, + final Object message, + final @Nullable Throwable throwable) { + if (isEnabled(level, marker, message, throwable)) { + logMessage(fqcn, level, marker, message, throwable); + } + } + + @Override + @PerformanceSensitive + public void logIfEnabled( + final String fqcn, + final Level level, + final @Nullable Marker marker, + final CharSequence message, + final @Nullable Throwable throwable) { + if (isEnabled(level, marker, message, throwable)) { + logMessage(fqcn, level, marker, message, throwable); + } + } + + @Override + @SuppressWarnings("deprecation") + @PerformanceSensitive + public void logIfEnabled( + final String fqcn, + final Level level, + final @Nullable Marker marker, + final Supplier messageSupplier, + final @Nullable Throwable throwable) { + if (isEnabled(level, marker, messageSupplier, throwable)) { + logMessage(fqcn, level, marker, messageSupplier, throwable); + } + } + + @Override + @PerformanceSensitive + public void logIfEnabled( + final String fqcn, final Level level, final @Nullable Marker marker, final String message) { + if (isEnabled(level, marker, message)) { + logMessage(fqcn, level, marker, message); + } + } + + @Override + @PerformanceSensitive + @SuppressWarnings("deprecation") + public void logIfEnabled( + final String fqcn, + final Level level, + final @Nullable Marker marker, + final String message, + final Supplier... paramSuppliers) { + if (isEnabled(level, marker, message)) { + logMessage(fqcn, level, marker, message, paramSuppliers); + } + } + + @Override + @PerformanceSensitive + public void logIfEnabled( + final String fqcn, + final Level level, + final @Nullable Marker marker, + final String message, + final Object... params) { + if (isEnabled(level, marker, message, params)) { + logMessage(fqcn, level, marker, message, params); + } + } + + @Override + @PerformanceSensitive + public void logIfEnabled( + final String fqcn, + final Level level, + final @Nullable Marker marker, + final String message, + final Object p0) { + if (isEnabled(level, marker, message, p0)) { + logMessage(fqcn, level, marker, message, p0); + } + } + + @Override + @PerformanceSensitive + public void logIfEnabled( + final String fqcn, + final Level level, + final @Nullable Marker marker, + final String message, + final Object p0, + final Object p1) { + if (isEnabled(level, marker, message, p0, p1)) { + logMessage(fqcn, level, marker, message, p0, p1); + } + } + + @Override + @PerformanceSensitive + public void logIfEnabled( + final String fqcn, + final Level level, + final @Nullable Marker marker, + final String message, + final Object p0, + final Object p1, + final Object p2) { + if (isEnabled(level, marker, message, p0, p1, p2)) { + logMessage(fqcn, level, marker, message, p0, p1, p2); + } + } + + @Override + public void logIfEnabled( + final String fqcn, + final Level level, + final @Nullable Marker marker, + final String message, + final Object p0, + final Object p1, + final Object p2, + final Object p3) { + if (isEnabled(level, marker, message, p0, p1, p2, p3)) { + logMessage(fqcn, level, marker, message, p0, p1, p2, p3); + } + } + + @Override + public void logIfEnabled( + final String fqcn, + final Level level, + final @Nullable Marker marker, + final String message, + final Object p0, + final Object p1, + final Object p2, + final Object p3, + final Object p4) { + if (isEnabled(level, marker, message, p0, p1, p2, p3, p4)) { + logMessage(fqcn, level, marker, message, p0, p1, p2, p3, p4); + } + } + + @Override + public void logIfEnabled( + final String fqcn, + final Level level, + final @Nullable Marker marker, + final String message, + final Object p0, + final Object p1, + final Object p2, + final Object p3, + final Object p4, + final Object p5) { + if (isEnabled(level, marker, message, p0, p1, p2, p3, p4, p5)) { + logMessage(fqcn, level, marker, message, p0, p1, p2, p3, p4, p5); + } + } + + @Override + public void logIfEnabled( + final String fqcn, + final Level level, + final @Nullable Marker marker, + final String message, + final Object p0, + final Object p1, + final Object p2, + final Object p3, + final Object p4, + final Object p5, + final Object p6) { + if (isEnabled(level, marker, message, p0, p1, p2, p3, p4, p5, p6)) { + logMessage(fqcn, level, marker, message, p0, p1, p2, p3, p4, p5, p6); + } + } + + @Override + public void logIfEnabled( + final String fqcn, + final Level level, + final @Nullable Marker marker, + final String message, + final Object p0, + final Object p1, + final Object p2, + final Object p3, + final Object p4, + final Object p5, + final Object p6, + final Object p7) { + if (isEnabled(level, marker, message, p0, p1, p2, p3, p4, p5, p6, p7)) { + logMessage(fqcn, level, marker, message, p0, p1, p2, p3, p4, p5, p6, p7); + } + } + + @Override + public void logIfEnabled( + final String fqcn, + final Level level, + final @Nullable Marker marker, + final String message, + final Object p0, + final Object p1, + final Object p2, + final Object p3, + final Object p4, + final Object p5, + final Object p6, + final Object p7, + final Object p8) { + if (isEnabled(level, marker, message, p0, p1, p2, p3, p4, p5, p6, p7, p8)) { + logMessage(fqcn, level, marker, message, p0, p1, p2, p3, p4, p5, p6, p7, p8); + } + } + + @Override + public void logIfEnabled( + final String fqcn, + final Level level, + final @Nullable Marker marker, + final String message, + final Object p0, + final Object p1, + final Object p2, + final Object p3, + final Object p4, + final Object p5, + final Object p6, + final Object p7, + final Object p8, + final Object p9) { + if (isEnabled(level, marker, message, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9)) { + logMessage(fqcn, level, marker, message, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9); + } + } + + @Override + @PerformanceSensitive + public void logIfEnabled( + final String fqcn, + final Level level, + final @Nullable Marker marker, + final String message, + final @Nullable Throwable throwable) { + if (isEnabled(level, marker, message, throwable)) { + logMessage(fqcn, level, marker, message, throwable); + } + } + + @Override + @PerformanceSensitive + public void logMessage( + final String fqcn, + final Level level, + final @Nullable Marker marker, + final @Nullable Message message, + final @Nullable Throwable throwable) { + // This method does NOT check the level + logMessageSafely(fqcn, null, level, marker, message, throwable); + } + + @Override + @PerformanceSensitive + public void logMessage( + final Level level, + final @Nullable Marker marker, + final String fqcn, + final StackTraceElement location, + final @Nullable Message message, + final @Nullable Throwable throwable) { + // This method does NOT check the level + logMessageSafely(fqcn, location, level, marker, message, throwable); + } + // + + // + + // + + // + @Override + public LogBuilder atTrace() { + return atLevel(Level.TRACE); + } + + @Override + public LogBuilder atDebug() { + return atLevel(Level.DEBUG); + } + + @Override + public LogBuilder atInfo() { + return atLevel(Level.INFO); + } + + @Override + public LogBuilder atWarn() { + return atLevel(Level.WARN); + } + + @Override + public LogBuilder atError() { + return atLevel(Level.ERROR); + } + + @Override + public LogBuilder atFatal() { + return atLevel(Level.FATAL); + } + + @Override + public LogBuilder always() { + return getLogBuilder(Level.OFF); + } + + @Override + public LogBuilder atLevel(final Level level) { + return isEnabled(level) ? getLogBuilder(level) : LogBuilder.NOOP; + } + // + + // + @Override + public void debug(final @Nullable Marker marker, final CharSequence message) { + logIfEnabled(FQCN, Level.DEBUG, marker, message, null); + } + + @Override + public void debug(final @Nullable Marker marker, final CharSequence message, final @Nullable Throwable throwable) { + logIfEnabled(FQCN, Level.DEBUG, marker, message, throwable); + } + + @Override + public void debug(final Marker marker, final @Nullable Message message) { + logIfEnabled(FQCN, Level.DEBUG, marker, message, message != null ? message.getThrowable() : null); + } + + @Override + public void debug( + final @Nullable Marker marker, final @Nullable Message message, final @Nullable Throwable throwable) { + logIfEnabled(FQCN, Level.DEBUG, marker, message, throwable); + } + + @Override + public void debug(final @Nullable Marker marker, final Object message) { + logIfEnabled(FQCN, Level.DEBUG, marker, message, null); + } + + @Override + public void debug(final @Nullable Marker marker, final Object message, final @Nullable Throwable throwable) { + logIfEnabled(FQCN, Level.DEBUG, marker, message, throwable); + } + + @Override + public void debug(final @Nullable Marker marker, final String message) { + logIfEnabled(FQCN, Level.DEBUG, marker, message, (Throwable) null); + } + + @Override + public void debug(final @Nullable Marker marker, final String message, final Object... params) { + logIfEnabled(FQCN, Level.DEBUG, marker, message, params); + } + + @Override + public void debug(final @Nullable Marker marker, final String message, final @Nullable Throwable throwable) { + logIfEnabled(FQCN, Level.DEBUG, marker, message, throwable); + } + + @Override + public void debug(final @Nullable Message message) { + logIfEnabled(FQCN, Level.DEBUG, null, message, message != null ? message.getThrowable() : null); + } + + @Override + public void debug(final @Nullable Message message, final @Nullable Throwable throwable) { + logIfEnabled(FQCN, Level.DEBUG, null, message, throwable); + } + + @Override + public void debug(final CharSequence message) { + logIfEnabled(FQCN, Level.DEBUG, null, message, null); + } + + @Override + public void debug(final CharSequence message, final @Nullable Throwable throwable) { + logIfEnabled(FQCN, Level.DEBUG, null, message, throwable); + } + + @Override + public void debug(final Object message) { + logIfEnabled(FQCN, Level.DEBUG, null, message, null); + } + + @Override + public void debug(final Object message, final @Nullable Throwable throwable) { + logIfEnabled(FQCN, Level.DEBUG, null, message, throwable); + } + + @Override + public void debug(final String message) { + logIfEnabled(FQCN, Level.DEBUG, null, message, (Throwable) null); + } + + @Override + public void debug(final String message, final Object... params) { + logIfEnabled(FQCN, Level.DEBUG, null, message, params); + } + + @Override + public void debug(final String message, final @Nullable Throwable throwable) { + logIfEnabled(FQCN, Level.DEBUG, null, message, throwable); + } + + @Override + @SuppressWarnings("deprecation") + public void debug(final Supplier messageSupplier) { + logIfEnabled(FQCN, Level.DEBUG, null, messageSupplier, null); + } + + @Override + @SuppressWarnings("deprecation") + public void debug(final Supplier messageSupplier, final @Nullable Throwable throwable) { + logIfEnabled(FQCN, Level.DEBUG, null, messageSupplier, throwable); + } + + @Override + @SuppressWarnings("deprecation") + public void debug(final @Nullable Marker marker, final Supplier messageSupplier) { + logIfEnabled(FQCN, Level.DEBUG, marker, messageSupplier, null); + } + + @Override + @SuppressWarnings("deprecation") + public void debug(final @Nullable Marker marker, final String message, final Supplier... paramSuppliers) { + logIfEnabled(FQCN, Level.DEBUG, marker, message, paramSuppliers); + } + + @Override + @SuppressWarnings("deprecation") + public void debug( + final @Nullable Marker marker, final Supplier messageSupplier, final @Nullable Throwable throwable) { + logIfEnabled(FQCN, Level.DEBUG, marker, messageSupplier, throwable); + } + + @Override + @SuppressWarnings("deprecation") + public void debug(final String message, final Supplier... paramSuppliers) { + logIfEnabled(FQCN, Level.DEBUG, null, message, paramSuppliers); + } + + @Override + @SuppressWarnings("deprecation") + public void debug(final @Nullable Marker marker, final MessageSupplier messageSupplier) { + logIfEnabled(FQCN, Level.DEBUG, marker, messageSupplier, null); + } + + @Override + @SuppressWarnings("deprecation") + public void debug( + final @Nullable Marker marker, final MessageSupplier messageSupplier, final @Nullable Throwable throwable) { + logIfEnabled(FQCN, Level.DEBUG, marker, messageSupplier, throwable); + } + + @Override + @SuppressWarnings("deprecation") + public void debug(final MessageSupplier messageSupplier) { + logIfEnabled(FQCN, Level.DEBUG, null, messageSupplier, null); + } + + @Override + @SuppressWarnings("deprecation") + public void debug(final MessageSupplier messageSupplier, final @Nullable Throwable throwable) { + logIfEnabled(FQCN, Level.DEBUG, null, messageSupplier, throwable); + } + + @Override + public void debug(final @Nullable Marker marker, final String message, final Object p0) { + logIfEnabled(FQCN, Level.DEBUG, marker, message, p0); + } + + @Override + public void debug(final @Nullable Marker marker, final String message, final Object p0, final Object p1) { + logIfEnabled(FQCN, Level.DEBUG, marker, message, p0, p1); + } + + @Override + public void debug( + final @Nullable Marker marker, final String message, final Object p0, final Object p1, final Object p2) { + logIfEnabled(FQCN, Level.DEBUG, marker, message, p0, p1, p2); + } + + @Override + public void debug( + final @Nullable Marker marker, + final String message, + final Object p0, + final Object p1, + final Object p2, + final Object p3) { + logIfEnabled(FQCN, Level.DEBUG, marker, message, p0, p1, p2, p3); + } + + @Override + public void debug( + final @Nullable Marker marker, + final String message, + final Object p0, + final Object p1, + final Object p2, + final Object p3, + final Object p4) { + logIfEnabled(FQCN, Level.DEBUG, marker, message, p0, p1, p2, p3, p4); + } + + @Override + public void debug( + final @Nullable Marker marker, + final String message, + final Object p0, + final Object p1, + final Object p2, + final Object p3, + final Object p4, + final Object p5) { + logIfEnabled(FQCN, Level.DEBUG, marker, message, p0, p1, p2, p3, p4, p5); + } + + @Override + public void debug( + final @Nullable Marker marker, + final String message, + final Object p0, + final Object p1, + final Object p2, + final Object p3, + final Object p4, + final Object p5, + final Object p6) { + logIfEnabled(FQCN, Level.DEBUG, marker, message, p0, p1, p2, p3, p4, p5, p6); + } + + @Override + public void debug( + final @Nullable Marker marker, + final String message, + final Object p0, + final Object p1, + final Object p2, + final Object p3, + final Object p4, + final Object p5, + final Object p6, + final Object p7) { + logIfEnabled(FQCN, Level.DEBUG, marker, message, p0, p1, p2, p3, p4, p5, p6, p7); + } + + @Override + public void debug( + final @Nullable Marker marker, + final String message, + final Object p0, + final Object p1, + final Object p2, + final Object p3, + final Object p4, + final Object p5, + final Object p6, + final Object p7, + final Object p8) { + logIfEnabled(FQCN, Level.DEBUG, marker, message, p0, p1, p2, p3, p4, p5, p6, p7, p8); + } + + @Override + public void debug( + final @Nullable Marker marker, + final String message, + final Object p0, + final Object p1, + final Object p2, + final Object p3, + final Object p4, + final Object p5, + final Object p6, + final Object p7, + final Object p8, + final Object p9) { + logIfEnabled(FQCN, Level.DEBUG, marker, message, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9); + } + + @Override + public void debug(final String message, final Object p0) { + logIfEnabled(FQCN, Level.DEBUG, null, message, p0); + } + + @Override + public void debug(final String message, final Object p0, final Object p1) { + logIfEnabled(FQCN, Level.DEBUG, null, message, p0, p1); + } + + @Override + public void debug(final String message, final Object p0, final Object p1, final Object p2) { + logIfEnabled(FQCN, Level.DEBUG, null, message, p0, p1, p2); + } + + @Override + public void debug(final String message, final Object p0, final Object p1, final Object p2, final Object p3) { + logIfEnabled(FQCN, Level.DEBUG, null, message, p0, p1, p2, p3); + } + + @Override + public void debug( + final String message, final Object p0, final Object p1, final Object p2, final Object p3, final Object p4) { + logIfEnabled(FQCN, Level.DEBUG, null, message, p0, p1, p2, p3, p4); + } + + @Override + public void debug( + final String message, + final Object p0, + final Object p1, + final Object p2, + final Object p3, + final Object p4, + final Object p5) { + logIfEnabled(FQCN, Level.DEBUG, null, message, p0, p1, p2, p3, p4, p5); + } + + @Override + public void debug( + final String message, + final Object p0, + final Object p1, + final Object p2, + final Object p3, + final Object p4, + final Object p5, + final Object p6) { + logIfEnabled(FQCN, Level.DEBUG, null, message, p0, p1, p2, p3, p4, p5, p6); + } + + @Override + public void debug( + final String message, + final Object p0, + final Object p1, + final Object p2, + final Object p3, + final Object p4, + final Object p5, + final Object p6, + final Object p7) { + logIfEnabled(FQCN, Level.DEBUG, null, message, p0, p1, p2, p3, p4, p5, p6, p7); + } + + @Override + public void debug( + final String message, + final Object p0, + final Object p1, + final Object p2, + final Object p3, + final Object p4, + final Object p5, + final Object p6, + final Object p7, + final Object p8) { + logIfEnabled(FQCN, Level.DEBUG, null, message, p0, p1, p2, p3, p4, p5, p6, p7, p8); + } + + @Override + public void debug( + final String message, + final Object p0, + final Object p1, + final Object p2, + final Object p3, + final Object p4, + final Object p5, + final Object p6, + final Object p7, + final Object p8, + final Object p9) { + logIfEnabled(FQCN, Level.DEBUG, null, message, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9); + } + + @Override + public void error(final @Nullable Marker marker, final @Nullable Message message) { + logIfEnabled(FQCN, Level.ERROR, marker, message, message != null ? message.getThrowable() : null); + } + + @Override + public void error( + final @Nullable Marker marker, final @Nullable Message message, final @Nullable Throwable throwable) { + logIfEnabled(FQCN, Level.ERROR, marker, message, throwable); + } + + @Override + public void error(final @Nullable Marker marker, final CharSequence message) { + logIfEnabled(FQCN, Level.ERROR, marker, message, null); + } + + @Override + public void error(final @Nullable Marker marker, final CharSequence message, final @Nullable Throwable throwable) { + logIfEnabled(FQCN, Level.ERROR, marker, message, throwable); + } + + @Override + public void error(final @Nullable Marker marker, final Object message) { + logIfEnabled(FQCN, Level.ERROR, marker, message, null); + } + + @Override + public void error(final @Nullable Marker marker, final Object message, final @Nullable Throwable throwable) { + logIfEnabled(FQCN, Level.ERROR, marker, message, throwable); + } + + @Override + public void error(final @Nullable Marker marker, final String message) { + logIfEnabled(FQCN, Level.ERROR, marker, message, (Throwable) null); + } + + @Override + public void error(final @Nullable Marker marker, final String message, final Object... params) { + logIfEnabled(FQCN, Level.ERROR, marker, message, params); + } + + @Override + public void error(final @Nullable Marker marker, final String message, final @Nullable Throwable throwable) { + logIfEnabled(FQCN, Level.ERROR, marker, message, throwable); + } + + @Override + public void error(final @Nullable Message message) { + logIfEnabled(FQCN, Level.ERROR, null, message, message != null ? message.getThrowable() : null); + } + + @Override + public void error(final @Nullable Message message, final @Nullable Throwable throwable) { + logIfEnabled(FQCN, Level.ERROR, null, message, throwable); + } + + @Override + public void error(final CharSequence message) { + logIfEnabled(FQCN, Level.ERROR, null, message, null); + } + + @Override + public void error(final CharSequence message, final @Nullable Throwable throwable) { + logIfEnabled(FQCN, Level.ERROR, null, message, throwable); + } + + @Override + public void error(final Object message) { + logIfEnabled(FQCN, Level.ERROR, null, message, null); + } + + @Override + public void error(final Object message, final @Nullable Throwable throwable) { + logIfEnabled(FQCN, Level.ERROR, null, message, throwable); + } + + @Override + public void error(final String message) { + logIfEnabled(FQCN, Level.ERROR, null, message, (Throwable) null); + } + + @Override + public void error(final String message, final Object... params) { + logIfEnabled(FQCN, Level.ERROR, null, message, params); + } + + @Override + public void error(final String message, final @Nullable Throwable throwable) { + logIfEnabled(FQCN, Level.ERROR, null, message, throwable); + } + + @Override + @SuppressWarnings("deprecation") + public void error(final Supplier messageSupplier) { + logIfEnabled(FQCN, Level.ERROR, null, messageSupplier, null); + } + + @Override + @SuppressWarnings("deprecation") + public void error(final Supplier messageSupplier, final @Nullable Throwable throwable) { + logIfEnabled(FQCN, Level.ERROR, null, messageSupplier, throwable); + } + + @Override + @SuppressWarnings("deprecation") + public void error(final @Nullable Marker marker, final Supplier messageSupplier) { + logIfEnabled(FQCN, Level.ERROR, marker, messageSupplier, null); + } + + @Override + @SuppressWarnings("deprecation") + public void error(final @Nullable Marker marker, final String message, final Supplier... paramSuppliers) { + logIfEnabled(FQCN, Level.ERROR, marker, message, paramSuppliers); + } + + @Override + @SuppressWarnings("deprecation") + public void error( + final @Nullable Marker marker, final Supplier messageSupplier, final @Nullable Throwable throwable) { + logIfEnabled(FQCN, Level.ERROR, marker, messageSupplier, throwable); + } + + @Override + @SuppressWarnings("deprecation") + public void error(final String message, final Supplier... paramSuppliers) { + logIfEnabled(FQCN, Level.ERROR, null, message, paramSuppliers); + } + + @Override + @SuppressWarnings("deprecation") + public void error(final @Nullable Marker marker, final MessageSupplier messageSupplier) { + logIfEnabled(FQCN, Level.ERROR, marker, messageSupplier, null); + } + + @Override + @SuppressWarnings("deprecation") + public void error( + final @Nullable Marker marker, final MessageSupplier messageSupplier, final @Nullable Throwable throwable) { + logIfEnabled(FQCN, Level.ERROR, marker, messageSupplier, throwable); + } + + @Override + @SuppressWarnings("deprecation") + public void error(final MessageSupplier messageSupplier) { + logIfEnabled(FQCN, Level.ERROR, null, messageSupplier, null); + } + + @Override + @SuppressWarnings("deprecation") + public void error(final MessageSupplier messageSupplier, final @Nullable Throwable throwable) { + logIfEnabled(FQCN, Level.ERROR, null, messageSupplier, throwable); + } + + @Override + public void error(final @Nullable Marker marker, final String message, final Object p0) { + logIfEnabled(FQCN, Level.ERROR, marker, message, p0); + } + + @Override + public void error(final @Nullable Marker marker, final String message, final Object p0, final Object p1) { + logIfEnabled(FQCN, Level.ERROR, marker, message, p0, p1); + } + + @Override + public void error( + final @Nullable Marker marker, final String message, final Object p0, final Object p1, final Object p2) { + logIfEnabled(FQCN, Level.ERROR, marker, message, p0, p1, p2); + } + + @Override + public void error( + final @Nullable Marker marker, + final String message, + final Object p0, + final Object p1, + final Object p2, + final Object p3) { + logIfEnabled(FQCN, Level.ERROR, marker, message, p0, p1, p2, p3); + } + + @Override + public void error( + final @Nullable Marker marker, + final String message, + final Object p0, + final Object p1, + final Object p2, + final Object p3, + final Object p4) { + logIfEnabled(FQCN, Level.ERROR, marker, message, p0, p1, p2, p3, p4); + } + + @Override + public void error( + final @Nullable Marker marker, + final String message, + final Object p0, + final Object p1, + final Object p2, + final Object p3, + final Object p4, + final Object p5) { + logIfEnabled(FQCN, Level.ERROR, marker, message, p0, p1, p2, p3, p4, p5); + } + + @Override + public void error( + final @Nullable Marker marker, + final String message, + final Object p0, + final Object p1, + final Object p2, + final Object p3, + final Object p4, + final Object p5, + final Object p6) { + logIfEnabled(FQCN, Level.ERROR, marker, message, p0, p1, p2, p3, p4, p5, p6); + } + + @Override + public void error( + final @Nullable Marker marker, + final String message, + final Object p0, + final Object p1, + final Object p2, + final Object p3, + final Object p4, + final Object p5, + final Object p6, + final Object p7) { + logIfEnabled(FQCN, Level.ERROR, marker, message, p0, p1, p2, p3, p4, p5, p6, p7); + } + + @Override + public void error( + final @Nullable Marker marker, + final String message, + final Object p0, + final Object p1, + final Object p2, + final Object p3, + final Object p4, + final Object p5, + final Object p6, + final Object p7, + final Object p8) { + logIfEnabled(FQCN, Level.ERROR, marker, message, p0, p1, p2, p3, p4, p5, p6, p7, p8); + } + + @Override + public void error( + final @Nullable Marker marker, + final String message, + final Object p0, + final Object p1, + final Object p2, + final Object p3, + final Object p4, + final Object p5, + final Object p6, + final Object p7, + final Object p8, + final Object p9) { + logIfEnabled(FQCN, Level.ERROR, marker, message, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9); + } + + @Override + public void error(final String message, final Object p0) { + logIfEnabled(FQCN, Level.ERROR, null, message, p0); + } + + @Override + public void error(final String message, final Object p0, final Object p1) { + logIfEnabled(FQCN, Level.ERROR, null, message, p0, p1); + } + + @Override + public void error(final String message, final Object p0, final Object p1, final Object p2) { + logIfEnabled(FQCN, Level.ERROR, null, message, p0, p1, p2); + } + + @Override + public void error(final String message, final Object p0, final Object p1, final Object p2, final Object p3) { + logIfEnabled(FQCN, Level.ERROR, null, message, p0, p1, p2, p3); + } + + @Override + public void error( + final String message, final Object p0, final Object p1, final Object p2, final Object p3, final Object p4) { + logIfEnabled(FQCN, Level.ERROR, null, message, p0, p1, p2, p3, p4); + } + + @Override + public void error( + final String message, + final Object p0, + final Object p1, + final Object p2, + final Object p3, + final Object p4, + final Object p5) { + logIfEnabled(FQCN, Level.ERROR, null, message, p0, p1, p2, p3, p4, p5); + } + + @Override + public void error( + final String message, + final Object p0, + final Object p1, + final Object p2, + final Object p3, + final Object p4, + final Object p5, + final Object p6) { + logIfEnabled(FQCN, Level.ERROR, null, message, p0, p1, p2, p3, p4, p5, p6); + } + + @Override + public void error( + final String message, + final Object p0, + final Object p1, + final Object p2, + final Object p3, + final Object p4, + final Object p5, + final Object p6, + final Object p7) { + logIfEnabled(FQCN, Level.ERROR, null, message, p0, p1, p2, p3, p4, p5, p6, p7); + } + + @Override + public void error( + final String message, + final Object p0, + final Object p1, + final Object p2, + final Object p3, + final Object p4, + final Object p5, + final Object p6, + final Object p7, + final Object p8) { + logIfEnabled(FQCN, Level.ERROR, null, message, p0, p1, p2, p3, p4, p5, p6, p7, p8); + } + + @Override + public void error( + final String message, + final Object p0, + final Object p1, + final Object p2, + final Object p3, + final Object p4, + final Object p5, + final Object p6, + final Object p7, + final Object p8, + final Object p9) { + logIfEnabled(FQCN, Level.ERROR, null, message, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9); + } + + @Override + public void fatal(final @Nullable Marker marker, final @Nullable Message message) { + logIfEnabled(FQCN, Level.FATAL, marker, message, message != null ? message.getThrowable() : null); + } + + @Override + public void fatal( + final @Nullable Marker marker, final @Nullable Message message, final @Nullable Throwable throwable) { + logIfEnabled(FQCN, Level.FATAL, marker, message, throwable); + } + + @Override + public void fatal(final @Nullable Marker marker, final CharSequence message) { + logIfEnabled(FQCN, Level.FATAL, marker, message, null); + } + + @Override + public void fatal(final @Nullable Marker marker, final CharSequence message, final @Nullable Throwable throwable) { + logIfEnabled(FQCN, Level.FATAL, marker, message, throwable); + } + + @Override + public void fatal(final @Nullable Marker marker, final Object message) { + logIfEnabled(FQCN, Level.FATAL, marker, message, null); + } + + @Override + public void fatal(final @Nullable Marker marker, final Object message, final @Nullable Throwable throwable) { + logIfEnabled(FQCN, Level.FATAL, marker, message, throwable); + } + + @Override + public void fatal(final @Nullable Marker marker, final String message) { + logIfEnabled(FQCN, Level.FATAL, marker, message, (Throwable) null); + } + + @Override + public void fatal(final @Nullable Marker marker, final String message, final Object... params) { + logIfEnabled(FQCN, Level.FATAL, marker, message, params); + } + + @Override + public void fatal(final @Nullable Marker marker, final String message, final @Nullable Throwable throwable) { + logIfEnabled(FQCN, Level.FATAL, marker, message, throwable); + } + + @Override + public void fatal(final @Nullable Message message) { + logIfEnabled(FQCN, Level.FATAL, null, message, message != null ? message.getThrowable() : null); + } + + @Override + public void fatal(final @Nullable Message message, final @Nullable Throwable throwable) { + logIfEnabled(FQCN, Level.FATAL, null, message, throwable); + } + + @Override + public void fatal(final CharSequence message) { + logIfEnabled(FQCN, Level.FATAL, null, message, null); + } + + @Override + public void fatal(final CharSequence message, final @Nullable Throwable throwable) { + logIfEnabled(FQCN, Level.FATAL, null, message, throwable); + } + + @Override + public void fatal(final Object message) { + logIfEnabled(FQCN, Level.FATAL, null, message, null); + } + + @Override + public void fatal(final Object message, final @Nullable Throwable throwable) { + logIfEnabled(FQCN, Level.FATAL, null, message, throwable); + } + + @Override + public void fatal(final String message) { + logIfEnabled(FQCN, Level.FATAL, null, message, (Throwable) null); + } + + @Override + public void fatal(final String message, final Object... params) { + logIfEnabled(FQCN, Level.FATAL, null, message, params); + } + + @Override + public void fatal(final String message, final @Nullable Throwable throwable) { + logIfEnabled(FQCN, Level.FATAL, null, message, throwable); + } + + @Override + @SuppressWarnings("deprecation") + public void fatal(final Supplier messageSupplier) { + logIfEnabled(FQCN, Level.FATAL, null, messageSupplier, null); + } + + @Override + @SuppressWarnings("deprecation") + public void fatal(final Supplier messageSupplier, final @Nullable Throwable throwable) { + logIfEnabled(FQCN, Level.FATAL, null, messageSupplier, throwable); + } + + @Override + @SuppressWarnings("deprecation") + public void fatal(final @Nullable Marker marker, final Supplier messageSupplier) { + logIfEnabled(FQCN, Level.FATAL, marker, messageSupplier, null); + } + + @Override + @SuppressWarnings("deprecation") + public void fatal(final @Nullable Marker marker, final String message, final Supplier... paramSuppliers) { + logIfEnabled(FQCN, Level.FATAL, marker, message, paramSuppliers); + } + + @Override + @SuppressWarnings("deprecation") + public void fatal( + final @Nullable Marker marker, final Supplier messageSupplier, final @Nullable Throwable throwable) { + logIfEnabled(FQCN, Level.FATAL, marker, messageSupplier, throwable); + } + + @Override + @SuppressWarnings("deprecation") + public void fatal(final String message, final Supplier... paramSuppliers) { + logIfEnabled(FQCN, Level.FATAL, null, message, paramSuppliers); + } + + @Override + @SuppressWarnings("deprecation") + public void fatal(final @Nullable Marker marker, final MessageSupplier messageSupplier) { + logIfEnabled(FQCN, Level.FATAL, marker, messageSupplier, null); + } + + @Override + @SuppressWarnings("deprecation") + public void fatal( + final @Nullable Marker marker, final MessageSupplier messageSupplier, final @Nullable Throwable throwable) { + logIfEnabled(FQCN, Level.FATAL, marker, messageSupplier, throwable); + } + + @Override + @SuppressWarnings("deprecation") + public void fatal(final MessageSupplier messageSupplier) { + logIfEnabled(FQCN, Level.FATAL, null, messageSupplier, null); + } + + @Override + @SuppressWarnings("deprecation") + public void fatal(final MessageSupplier messageSupplier, final @Nullable Throwable throwable) { + logIfEnabled(FQCN, Level.FATAL, null, messageSupplier, throwable); + } + + @Override + public void fatal(final @Nullable Marker marker, final String message, final Object p0) { + logIfEnabled(FQCN, Level.FATAL, marker, message, p0); + } + + @Override + public void fatal(final @Nullable Marker marker, final String message, final Object p0, final Object p1) { + logIfEnabled(FQCN, Level.FATAL, marker, message, p0, p1); + } + + @Override + public void fatal( + final @Nullable Marker marker, final String message, final Object p0, final Object p1, final Object p2) { + logIfEnabled(FQCN, Level.FATAL, marker, message, p0, p1, p2); + } + + @Override + public void fatal( + final @Nullable Marker marker, + final String message, + final Object p0, + final Object p1, + final Object p2, + final Object p3) { + logIfEnabled(FQCN, Level.FATAL, marker, message, p0, p1, p2, p3); + } + + @Override + public void fatal( + final @Nullable Marker marker, + final String message, + final Object p0, + final Object p1, + final Object p2, + final Object p3, + final Object p4) { + logIfEnabled(FQCN, Level.FATAL, marker, message, p0, p1, p2, p3, p4); + } + + @Override + public void fatal( + final @Nullable Marker marker, + final String message, + final Object p0, + final Object p1, + final Object p2, + final Object p3, + final Object p4, + final Object p5) { + logIfEnabled(FQCN, Level.FATAL, marker, message, p0, p1, p2, p3, p4, p5); + } + + @Override + public void fatal( + final @Nullable Marker marker, + final String message, + final Object p0, + final Object p1, + final Object p2, + final Object p3, + final Object p4, + final Object p5, + final Object p6) { + logIfEnabled(FQCN, Level.FATAL, marker, message, p0, p1, p2, p3, p4, p5, p6); + } + + @Override + public void fatal( + final @Nullable Marker marker, + final String message, + final Object p0, + final Object p1, + final Object p2, + final Object p3, + final Object p4, + final Object p5, + final Object p6, + final Object p7) { + logIfEnabled(FQCN, Level.FATAL, marker, message, p0, p1, p2, p3, p4, p5, p6, p7); + } + + @Override + public void fatal( + final @Nullable Marker marker, + final String message, + final Object p0, + final Object p1, + final Object p2, + final Object p3, + final Object p4, + final Object p5, + final Object p6, + final Object p7, + final Object p8) { + logIfEnabled(FQCN, Level.FATAL, marker, message, p0, p1, p2, p3, p4, p5, p6, p7, p8); + } + + @Override + public void fatal( + final @Nullable Marker marker, + final String message, + final Object p0, + final Object p1, + final Object p2, + final Object p3, + final Object p4, + final Object p5, + final Object p6, + final Object p7, + final Object p8, + final Object p9) { + logIfEnabled(FQCN, Level.FATAL, marker, message, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9); + } + + @Override + public void fatal(final String message, final Object p0) { + logIfEnabled(FQCN, Level.FATAL, null, message, p0); + } + + @Override + public void fatal(final String message, final Object p0, final Object p1) { + logIfEnabled(FQCN, Level.FATAL, null, message, p0, p1); + } + + @Override + public void fatal(final String message, final Object p0, final Object p1, final Object p2) { + logIfEnabled(FQCN, Level.FATAL, null, message, p0, p1, p2); + } + + @Override + public void fatal(final String message, final Object p0, final Object p1, final Object p2, final Object p3) { + logIfEnabled(FQCN, Level.FATAL, null, message, p0, p1, p2, p3); + } + + @Override + public void fatal( + final String message, final Object p0, final Object p1, final Object p2, final Object p3, final Object p4) { + logIfEnabled(FQCN, Level.FATAL, null, message, p0, p1, p2, p3, p4); + } + + @Override + public void fatal( + final String message, + final Object p0, + final Object p1, + final Object p2, + final Object p3, + final Object p4, + final Object p5) { + logIfEnabled(FQCN, Level.FATAL, null, message, p0, p1, p2, p3, p4, p5); + } + + @Override + public void fatal( + final String message, + final Object p0, + final Object p1, + final Object p2, + final Object p3, + final Object p4, + final Object p5, + final Object p6) { + logIfEnabled(FQCN, Level.FATAL, null, message, p0, p1, p2, p3, p4, p5, p6); + } + + @Override + public void fatal( + final String message, + final Object p0, + final Object p1, + final Object p2, + final Object p3, + final Object p4, + final Object p5, + final Object p6, + final Object p7) { + logIfEnabled(FQCN, Level.FATAL, null, message, p0, p1, p2, p3, p4, p5, p6, p7); + } + + @Override + public void fatal( + final String message, + final Object p0, + final Object p1, + final Object p2, + final Object p3, + final Object p4, + final Object p5, + final Object p6, + final Object p7, + final Object p8) { + logIfEnabled(FQCN, Level.FATAL, null, message, p0, p1, p2, p3, p4, p5, p6, p7, p8); + } + + @Override + public void fatal( + final String message, + final Object p0, + final Object p1, + final Object p2, + final Object p3, + final Object p4, + final Object p5, + final Object p6, + final Object p7, + final Object p8, + final Object p9) { + logIfEnabled(FQCN, Level.FATAL, null, message, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9); + } + + @Override + public void info(final @Nullable Marker marker, final @Nullable Message message) { + logIfEnabled(FQCN, Level.INFO, marker, message, message != null ? message.getThrowable() : null); + } + + @Override + public void info( + final @Nullable Marker marker, final @Nullable Message message, final @Nullable Throwable throwable) { + logIfEnabled(FQCN, Level.INFO, marker, message, throwable); + } + + @Override + public void info(final @Nullable Marker marker, final CharSequence message) { + logIfEnabled(FQCN, Level.INFO, marker, message, null); + } + + @Override + public void info(final @Nullable Marker marker, final CharSequence message, final @Nullable Throwable throwable) { + logIfEnabled(FQCN, Level.INFO, marker, message, throwable); + } + + @Override + public void info(final @Nullable Marker marker, final Object message) { + logIfEnabled(FQCN, Level.INFO, marker, message, null); + } + + @Override + public void info(final @Nullable Marker marker, final Object message, final @Nullable Throwable throwable) { + logIfEnabled(FQCN, Level.INFO, marker, message, throwable); + } + + @Override + public void info(final @Nullable Marker marker, final String message) { + logIfEnabled(FQCN, Level.INFO, marker, message, (Throwable) null); + } + + @Override + public void info(final @Nullable Marker marker, final String message, final Object... params) { + logIfEnabled(FQCN, Level.INFO, marker, message, params); + } + + @Override + public void info(final @Nullable Marker marker, final String message, final @Nullable Throwable throwable) { + logIfEnabled(FQCN, Level.INFO, marker, message, throwable); + } + + @Override + public void info(final @Nullable Message message) { + logIfEnabled(FQCN, Level.INFO, null, message, message != null ? message.getThrowable() : null); + } + + @Override + public void info(final @Nullable Message message, final @Nullable Throwable throwable) { + logIfEnabled(FQCN, Level.INFO, null, message, throwable); + } + + @Override + public void info(final CharSequence message) { + logIfEnabled(FQCN, Level.INFO, null, message, null); + } + + @Override + public void info(final CharSequence message, final @Nullable Throwable throwable) { + logIfEnabled(FQCN, Level.INFO, null, message, throwable); + } + + @Override + public void info(final Object message) { + logIfEnabled(FQCN, Level.INFO, null, message, null); + } + + @Override + public void info(final Object message, final @Nullable Throwable throwable) { + logIfEnabled(FQCN, Level.INFO, null, message, throwable); + } + + @Override + public void info(final String message) { + logIfEnabled(FQCN, Level.INFO, null, message, (Throwable) null); + } + + @Override + public void info(final String message, final Object... params) { + logIfEnabled(FQCN, Level.INFO, null, message, params); + } + + @Override + public void info(final String message, final @Nullable Throwable throwable) { + logIfEnabled(FQCN, Level.INFO, null, message, throwable); + } + + @Override + @SuppressWarnings("deprecation") + public void info(final Supplier messageSupplier) { + logIfEnabled(FQCN, Level.INFO, null, messageSupplier, null); + } + + @Override + @SuppressWarnings("deprecation") + public void info(final Supplier messageSupplier, final @Nullable Throwable throwable) { + logIfEnabled(FQCN, Level.INFO, null, messageSupplier, throwable); + } + + @Override + @SuppressWarnings("deprecation") + public void info(final @Nullable Marker marker, final Supplier messageSupplier) { + logIfEnabled(FQCN, Level.INFO, marker, messageSupplier, null); + } + + @Override + @SuppressWarnings("deprecation") + public void info(final @Nullable Marker marker, final String message, final Supplier... paramSuppliers) { + logIfEnabled(FQCN, Level.INFO, marker, message, paramSuppliers); + } + + @Override + @SuppressWarnings("deprecation") + public void info( + final @Nullable Marker marker, final Supplier messageSupplier, final @Nullable Throwable throwable) { + logIfEnabled(FQCN, Level.INFO, marker, messageSupplier, throwable); + } + + @Override + @SuppressWarnings("deprecation") + public void info(final String message, final Supplier... paramSuppliers) { + logIfEnabled(FQCN, Level.INFO, null, message, paramSuppliers); + } + + @Override + @SuppressWarnings("deprecation") + public void info(final @Nullable Marker marker, final MessageSupplier messageSupplier) { + logIfEnabled(FQCN, Level.INFO, marker, messageSupplier, null); + } + + @Override + @SuppressWarnings("deprecation") + public void info( + final @Nullable Marker marker, final MessageSupplier messageSupplier, final @Nullable Throwable throwable) { + logIfEnabled(FQCN, Level.INFO, marker, messageSupplier, throwable); + } + + @Override + @SuppressWarnings("deprecation") + public void info(final MessageSupplier messageSupplier) { + logIfEnabled(FQCN, Level.INFO, null, messageSupplier, null); + } + + @Override + @SuppressWarnings("deprecation") + public void info(final MessageSupplier messageSupplier, final @Nullable Throwable throwable) { + logIfEnabled(FQCN, Level.INFO, null, messageSupplier, throwable); + } + + @Override + public void info(final @Nullable Marker marker, final String message, final Object p0) { + logIfEnabled(FQCN, Level.INFO, marker, message, p0); + } + + @Override + public void info(final @Nullable Marker marker, final String message, final Object p0, final Object p1) { + logIfEnabled(FQCN, Level.INFO, marker, message, p0, p1); + } + + @Override + public void info( + final @Nullable Marker marker, final String message, final Object p0, final Object p1, final Object p2) { + logIfEnabled(FQCN, Level.INFO, marker, message, p0, p1, p2); + } + + @Override + public void info( + final @Nullable Marker marker, + final String message, + final Object p0, + final Object p1, + final Object p2, + final Object p3) { + logIfEnabled(FQCN, Level.INFO, marker, message, p0, p1, p2, p3); + } + + @Override + public void info( + final @Nullable Marker marker, + final String message, + final Object p0, + final Object p1, + final Object p2, + final Object p3, + final Object p4) { + logIfEnabled(FQCN, Level.INFO, marker, message, p0, p1, p2, p3, p4); + } + + @Override + public void info( + final @Nullable Marker marker, + final String message, + final Object p0, + final Object p1, + final Object p2, + final Object p3, + final Object p4, + final Object p5) { + logIfEnabled(FQCN, Level.INFO, marker, message, p0, p1, p2, p3, p4, p5); + } + + @Override + public void info( + final @Nullable Marker marker, + final String message, + final Object p0, + final Object p1, + final Object p2, + final Object p3, + final Object p4, + final Object p5, + final Object p6) { + logIfEnabled(FQCN, Level.INFO, marker, message, p0, p1, p2, p3, p4, p5, p6); + } + + @Override + public void info( + final @Nullable Marker marker, + final String message, + final Object p0, + final Object p1, + final Object p2, + final Object p3, + final Object p4, + final Object p5, + final Object p6, + final Object p7) { + logIfEnabled(FQCN, Level.INFO, marker, message, p0, p1, p2, p3, p4, p5, p6, p7); + } + + @Override + public void info( + final @Nullable Marker marker, + final String message, + final Object p0, + final Object p1, + final Object p2, + final Object p3, + final Object p4, + final Object p5, + final Object p6, + final Object p7, + final Object p8) { + logIfEnabled(FQCN, Level.INFO, marker, message, p0, p1, p2, p3, p4, p5, p6, p7, p8); + } + + @Override + public void info( + final @Nullable Marker marker, + final String message, + final Object p0, + final Object p1, + final Object p2, + final Object p3, + final Object p4, + final Object p5, + final Object p6, + final Object p7, + final Object p8, + final Object p9) { + logIfEnabled(FQCN, Level.INFO, marker, message, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9); + } + + @Override + public void info(final String message, final Object p0) { + logIfEnabled(FQCN, Level.INFO, null, message, p0); + } + + @Override + public void info(final String message, final Object p0, final Object p1) { + logIfEnabled(FQCN, Level.INFO, null, message, p0, p1); + } + + @Override + public void info(final String message, final Object p0, final Object p1, final Object p2) { + logIfEnabled(FQCN, Level.INFO, null, message, p0, p1, p2); + } + + @Override + public void info(final String message, final Object p0, final Object p1, final Object p2, final Object p3) { + logIfEnabled(FQCN, Level.INFO, null, message, p0, p1, p2, p3); + } + + @Override + public void info( + final String message, final Object p0, final Object p1, final Object p2, final Object p3, final Object p4) { + logIfEnabled(FQCN, Level.INFO, null, message, p0, p1, p2, p3, p4); + } + + @Override + public void info( + final String message, + final Object p0, + final Object p1, + final Object p2, + final Object p3, + final Object p4, + final Object p5) { + logIfEnabled(FQCN, Level.INFO, null, message, p0, p1, p2, p3, p4, p5); + } + + @Override + public void info( + final String message, + final Object p0, + final Object p1, + final Object p2, + final Object p3, + final Object p4, + final Object p5, + final Object p6) { + logIfEnabled(FQCN, Level.INFO, null, message, p0, p1, p2, p3, p4, p5, p6); + } + + @Override + public void info( + final String message, + final Object p0, + final Object p1, + final Object p2, + final Object p3, + final Object p4, + final Object p5, + final Object p6, + final Object p7) { + logIfEnabled(FQCN, Level.INFO, null, message, p0, p1, p2, p3, p4, p5, p6, p7); + } + + @Override + public void info( + final String message, + final Object p0, + final Object p1, + final Object p2, + final Object p3, + final Object p4, + final Object p5, + final Object p6, + final Object p7, + final Object p8) { + logIfEnabled(FQCN, Level.INFO, null, message, p0, p1, p2, p3, p4, p5, p6, p7, p8); + } + + @Override + public void info( + final String message, + final Object p0, + final Object p1, + final Object p2, + final Object p3, + final Object p4, + final Object p5, + final Object p6, + final Object p7, + final Object p8, + final Object p9) { + logIfEnabled(FQCN, Level.INFO, null, message, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9); + } + + @Override + public void log(final Level level, final @Nullable Marker marker, final @Nullable Message message) { + logIfEnabled(FQCN, level, marker, message, message != null ? message.getThrowable() : null); + } + + @Override + public void log( + final Level level, + final @Nullable Marker marker, + final @Nullable Message message, + final @Nullable Throwable throwable) { + logIfEnabled(FQCN, level, marker, message, throwable); + } + + @Override + public void log(final Level level, final @Nullable Marker marker, final CharSequence message) { + logIfEnabled(FQCN, level, marker, message, null); + } + + @Override + public void log( + final Level level, + final @Nullable Marker marker, + final CharSequence message, + final @Nullable Throwable throwable) { + logIfEnabled(FQCN, level, marker, message, throwable); + } + + @Override + public void log(final Level level, final @Nullable Marker marker, final Object message) { + logIfEnabled(FQCN, level, marker, message, null); + } + + @Override + public void log( + final Level level, + final @Nullable Marker marker, + final Object message, + final @Nullable Throwable throwable) { + logIfEnabled(FQCN, level, marker, message, throwable); + } + + @Override + public void log(final Level level, final @Nullable Marker marker, final String message) { + logIfEnabled(FQCN, level, marker, message, (Throwable) null); + } + + @Override + public void log(final Level level, final @Nullable Marker marker, final String message, final Object... params) { + logIfEnabled(FQCN, level, marker, message, params); + } + + @Override + public void log( + final Level level, + final @Nullable Marker marker, + final String message, + final @Nullable Throwable throwable) { + logIfEnabled(FQCN, level, marker, message, throwable); + } + + @Override + public void log(final Level level, final @Nullable Message message) { + logIfEnabled(FQCN, level, null, message, message != null ? message.getThrowable() : null); + } + + @Override + public void log(final Level level, final @Nullable Message message, final @Nullable Throwable throwable) { + logIfEnabled(FQCN, level, null, message, throwable); + } + + @Override + public void log(final Level level, final CharSequence message) { + logIfEnabled(FQCN, level, null, message, null); + } + + @Override + public void log(final Level level, final CharSequence message, final @Nullable Throwable throwable) { + logIfEnabled(FQCN, level, null, message, throwable); + } + + @Override + public void log(final Level level, final Object message) { + logIfEnabled(FQCN, level, null, message, null); + } + + @Override + public void log(final Level level, final Object message, final @Nullable Throwable throwable) { + logIfEnabled(FQCN, level, null, message, throwable); + } + + @Override + public void log(final Level level, final String message) { + logIfEnabled(FQCN, level, null, message, (Throwable) null); + } + + @Override + public void log(final Level level, final String message, final Object... params) { + logIfEnabled(FQCN, level, null, message, params); + } + + @Override + public void log(final Level level, final String message, final @Nullable Throwable throwable) { + logIfEnabled(FQCN, level, null, message, throwable); + } + + @Override + @SuppressWarnings("deprecation") + public void log(final Level level, final Supplier messageSupplier) { + logIfEnabled(FQCN, level, null, messageSupplier, null); + } + + @Override + @SuppressWarnings("deprecation") + public void log(final Level level, final Supplier messageSupplier, final @Nullable Throwable throwable) { + logIfEnabled(FQCN, level, null, messageSupplier, throwable); + } + + @Override + @SuppressWarnings("deprecation") + public void log(final Level level, final @Nullable Marker marker, final Supplier messageSupplier) { + logIfEnabled(FQCN, level, marker, messageSupplier, null); + } + + @Override + @SuppressWarnings("deprecation") + public void log( + final Level level, + final @Nullable Marker marker, + final String message, + final Supplier... paramSuppliers) { + logIfEnabled(FQCN, level, marker, message, paramSuppliers); + } + + @Override + @SuppressWarnings("deprecation") + public void log( + final Level level, + final @Nullable Marker marker, + final Supplier messageSupplier, + final @Nullable Throwable throwable) { + logIfEnabled(FQCN, level, marker, messageSupplier, throwable); + } + + @Override + @SuppressWarnings("deprecation") + public void log(final Level level, final String message, final Supplier... paramSuppliers) { + logIfEnabled(FQCN, level, null, message, paramSuppliers); + } + + @Override + @SuppressWarnings("deprecation") + public void log(final Level level, final @Nullable Marker marker, final MessageSupplier messageSupplier) { + logIfEnabled(FQCN, level, marker, messageSupplier, null); + } + + @Override + @SuppressWarnings("deprecation") + public void log( + final Level level, + final @Nullable Marker marker, + final MessageSupplier messageSupplier, + final @Nullable Throwable throwable) { + logIfEnabled(FQCN, level, marker, messageSupplier, throwable); + } + + @Override + @SuppressWarnings("deprecation") + public void log(final Level level, final MessageSupplier messageSupplier) { + logIfEnabled(FQCN, level, null, messageSupplier, null); + } + + @Override + @SuppressWarnings("deprecation") + public void log(final Level level, final MessageSupplier messageSupplier, final @Nullable Throwable throwable) { + logIfEnabled(FQCN, level, null, messageSupplier, throwable); + } + + @Override + public void log(final Level level, final @Nullable Marker marker, final String message, final Object p0) { + logIfEnabled(FQCN, level, marker, message, p0); + } + + @Override + public void log( + final Level level, final @Nullable Marker marker, final String message, final Object p0, final Object p1) { + logIfEnabled(FQCN, level, marker, message, p0, p1); + } + + @Override + public void log( + final Level level, + final @Nullable Marker marker, + final String message, + final Object p0, + final Object p1, + final Object p2) { + logIfEnabled(FQCN, level, marker, message, p0, p1, p2); + } + + @Override + public void log( + final Level level, + final @Nullable Marker marker, + final String message, + final Object p0, + final Object p1, + final Object p2, + final Object p3) { + logIfEnabled(FQCN, level, marker, message, p0, p1, p2, p3); + } + + @Override + public void log( + final Level level, + final @Nullable Marker marker, + final String message, + final Object p0, + final Object p1, + final Object p2, + final Object p3, + final Object p4) { + logIfEnabled(FQCN, level, marker, message, p0, p1, p2, p3, p4); + } + + @Override + public void log( + final Level level, + final @Nullable Marker marker, + final String message, + final Object p0, + final Object p1, + final Object p2, + final Object p3, + final Object p4, + final Object p5) { + logIfEnabled(FQCN, level, marker, message, p0, p1, p2, p3, p4, p5); + } + + @Override + public void log( + final Level level, + final @Nullable Marker marker, + final String message, + final Object p0, + final Object p1, + final Object p2, + final Object p3, + final Object p4, + final Object p5, + final Object p6) { + logIfEnabled(FQCN, level, marker, message, p0, p1, p2, p3, p4, p5, p6); + } + + @Override + public void log( + final Level level, + final @Nullable Marker marker, + final String message, + final Object p0, + final Object p1, + final Object p2, + final Object p3, + final Object p4, + final Object p5, + final Object p6, + final Object p7) { + logIfEnabled(FQCN, level, marker, message, p0, p1, p2, p3, p4, p5, p6, p7); + } + + @Override + public void log( + final Level level, + final @Nullable Marker marker, + final String message, + final Object p0, + final Object p1, + final Object p2, + final Object p3, + final Object p4, + final Object p5, + final Object p6, + final Object p7, + final Object p8) { + logIfEnabled(FQCN, level, marker, message, p0, p1, p2, p3, p4, p5, p6, p7, p8); + } + + @Override + public void log( + final Level level, + final @Nullable Marker marker, + final String message, + final Object p0, + final Object p1, + final Object p2, + final Object p3, + final Object p4, + final Object p5, + final Object p6, + final Object p7, + final Object p8, + final Object p9) { + logIfEnabled(FQCN, level, marker, message, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9); + } + + @Override + public void log(final Level level, final String message, final Object p0) { + logIfEnabled(FQCN, level, null, message, p0); + } + + @Override + public void log(final Level level, final String message, final Object p0, final Object p1) { + logIfEnabled(FQCN, level, null, message, p0, p1); + } + + @Override + public void log(final Level level, final String message, final Object p0, final Object p1, final Object p2) { + logIfEnabled(FQCN, level, null, message, p0, p1, p2); + } + + @Override + public void log( + final Level level, + final String message, + final Object p0, + final Object p1, + final Object p2, + final Object p3) { + logIfEnabled(FQCN, level, null, message, p0, p1, p2, p3); + } + + @Override + public void log( + final Level level, + final String message, + final Object p0, + final Object p1, + final Object p2, + final Object p3, + final Object p4) { + logIfEnabled(FQCN, level, null, message, p0, p1, p2, p3, p4); + } + + @Override + public void log( + final Level level, + final String message, + final Object p0, + final Object p1, + final Object p2, + final Object p3, + final Object p4, + final Object p5) { + logIfEnabled(FQCN, level, null, message, p0, p1, p2, p3, p4, p5); + } + + @Override + public void log( + final Level level, + final String message, + final Object p0, + final Object p1, + final Object p2, + final Object p3, + final Object p4, + final Object p5, + final Object p6) { + logIfEnabled(FQCN, level, null, message, p0, p1, p2, p3, p4, p5, p6); + } + + @Override + public void log( + final Level level, + final String message, + final Object p0, + final Object p1, + final Object p2, + final Object p3, + final Object p4, + final Object p5, + final Object p6, + final Object p7) { + logIfEnabled(FQCN, level, null, message, p0, p1, p2, p3, p4, p5, p6, p7); + } + + @Override + public void log( + final Level level, + final String message, + final Object p0, + final Object p1, + final Object p2, + final Object p3, + final Object p4, + final Object p5, + final Object p6, + final Object p7, + final Object p8) { + logIfEnabled(FQCN, level, null, message, p0, p1, p2, p3, p4, p5, p6, p7, p8); + } + + @Override + public void log( + final Level level, + final String message, + final Object p0, + final Object p1, + final Object p2, + final Object p3, + final Object p4, + final Object p5, + final Object p6, + final Object p7, + final Object p8, + final Object p9) { + logIfEnabled(FQCN, level, null, message, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9); + } + + @Override + public void trace(final @Nullable Marker marker, final @Nullable Message message) { + logIfEnabled(FQCN, Level.TRACE, marker, message, message != null ? message.getThrowable() : null); + } + + @Override + public void trace( + final @Nullable Marker marker, final @Nullable Message message, final @Nullable Throwable throwable) { + logIfEnabled(FQCN, Level.TRACE, marker, message, throwable); + } + + @Override + public void trace(final @Nullable Marker marker, final CharSequence message) { + logIfEnabled(FQCN, Level.TRACE, marker, message, null); + } + + @Override + public void trace(final @Nullable Marker marker, final CharSequence message, final @Nullable Throwable throwable) { + logIfEnabled(FQCN, Level.TRACE, marker, message, throwable); + } + + @Override + public void trace(final @Nullable Marker marker, final Object message) { + logIfEnabled(FQCN, Level.TRACE, marker, message, null); + } + + @Override + public void trace(final @Nullable Marker marker, final Object message, final @Nullable Throwable throwable) { + logIfEnabled(FQCN, Level.TRACE, marker, message, throwable); + } + + @Override + public void trace(final @Nullable Marker marker, final String message) { + logIfEnabled(FQCN, Level.TRACE, marker, message, (Throwable) null); + } + + @Override + public void trace(final @Nullable Marker marker, final String message, final Object... params) { + logIfEnabled(FQCN, Level.TRACE, marker, message, params); + } + + @Override + public void trace(final @Nullable Marker marker, final String message, final @Nullable Throwable throwable) { + logIfEnabled(FQCN, Level.TRACE, marker, message, throwable); + } + + @Override + public void trace(final @Nullable Message message) { + logIfEnabled(FQCN, Level.TRACE, null, message, message != null ? message.getThrowable() : null); + } + + @Override + public void trace(final @Nullable Message message, final @Nullable Throwable throwable) { + logIfEnabled(FQCN, Level.TRACE, null, message, throwable); + } + + @Override + public void trace(final CharSequence message) { + logIfEnabled(FQCN, Level.TRACE, null, message, null); + } + + @Override + public void trace(final CharSequence message, final @Nullable Throwable throwable) { + logIfEnabled(FQCN, Level.TRACE, null, message, throwable); + } + + @Override + public void trace(final Object message) { + logIfEnabled(FQCN, Level.TRACE, null, message, null); + } + + @Override + public void trace(final Object message, final @Nullable Throwable throwable) { + logIfEnabled(FQCN, Level.TRACE, null, message, throwable); + } + + @Override + public void trace(final String message) { + logIfEnabled(FQCN, Level.TRACE, null, message, (Throwable) null); + } + + @Override + public void trace(final String message, final Object... params) { + logIfEnabled(FQCN, Level.TRACE, null, message, params); + } + + @Override + public void trace(final String message, final @Nullable Throwable throwable) { + logIfEnabled(FQCN, Level.TRACE, null, message, throwable); + } + + @Override + @SuppressWarnings("deprecation") + public void trace(final Supplier messageSupplier) { + logIfEnabled(FQCN, Level.TRACE, null, messageSupplier, null); + } + + @Override + @SuppressWarnings("deprecation") + public void trace(final Supplier messageSupplier, final @Nullable Throwable throwable) { + logIfEnabled(FQCN, Level.TRACE, null, messageSupplier, throwable); + } + + @Override + @SuppressWarnings("deprecation") + public void trace(final @Nullable Marker marker, final Supplier messageSupplier) { + logIfEnabled(FQCN, Level.TRACE, marker, messageSupplier, null); + } + + @Override + @SuppressWarnings("deprecation") + public void trace(final @Nullable Marker marker, final String message, final Supplier... paramSuppliers) { + logIfEnabled(FQCN, Level.TRACE, marker, message, paramSuppliers); + } + + @Override + @SuppressWarnings("deprecation") + public void trace( + final @Nullable Marker marker, final Supplier messageSupplier, final @Nullable Throwable throwable) { + logIfEnabled(FQCN, Level.TRACE, marker, messageSupplier, throwable); + } + + @Override + @SuppressWarnings("deprecation") + public void trace(final String message, final Supplier... paramSuppliers) { + logIfEnabled(FQCN, Level.TRACE, null, message, paramSuppliers); + } + + @Override + @SuppressWarnings("deprecation") + public void trace(final @Nullable Marker marker, final MessageSupplier messageSupplier) { + logIfEnabled(FQCN, Level.TRACE, marker, messageSupplier, null); + } + + @Override + @SuppressWarnings("deprecation") + public void trace( + final @Nullable Marker marker, final MessageSupplier messageSupplier, final @Nullable Throwable throwable) { + logIfEnabled(FQCN, Level.TRACE, marker, messageSupplier, throwable); + } + + @Override + @SuppressWarnings("deprecation") + public void trace(final MessageSupplier messageSupplier) { + logIfEnabled(FQCN, Level.TRACE, null, messageSupplier, null); + } + + @Override + @SuppressWarnings("deprecation") + public void trace(final MessageSupplier messageSupplier, final @Nullable Throwable throwable) { + logIfEnabled(FQCN, Level.TRACE, null, messageSupplier, throwable); + } + + @Override + public void trace(final @Nullable Marker marker, final String message, final Object p0) { + logIfEnabled(FQCN, Level.TRACE, marker, message, p0); + } + + @Override + public void trace(final @Nullable Marker marker, final String message, final Object p0, final Object p1) { + logIfEnabled(FQCN, Level.TRACE, marker, message, p0, p1); + } + + @Override + public void trace( + final @Nullable Marker marker, final String message, final Object p0, final Object p1, final Object p2) { + logIfEnabled(FQCN, Level.TRACE, marker, message, p0, p1, p2); + } + + @Override + public void trace( + final @Nullable Marker marker, + final String message, + final Object p0, + final Object p1, + final Object p2, + final Object p3) { + logIfEnabled(FQCN, Level.TRACE, marker, message, p0, p1, p2, p3); + } + + @Override + public void trace( + final @Nullable Marker marker, + final String message, + final Object p0, + final Object p1, + final Object p2, + final Object p3, + final Object p4) { + logIfEnabled(FQCN, Level.TRACE, marker, message, p0, p1, p2, p3, p4); + } + + @Override + public void trace( + final @Nullable Marker marker, + final String message, + final Object p0, + final Object p1, + final Object p2, + final Object p3, + final Object p4, + final Object p5) { + logIfEnabled(FQCN, Level.TRACE, marker, message, p0, p1, p2, p3, p4, p5); + } + + @Override + public void trace( + final @Nullable Marker marker, + final String message, + final Object p0, + final Object p1, + final Object p2, + final Object p3, + final Object p4, + final Object p5, + final Object p6) { + logIfEnabled(FQCN, Level.TRACE, marker, message, p0, p1, p2, p3, p4, p5, p6); + } + + @Override + public void trace( + final @Nullable Marker marker, + final String message, + final Object p0, + final Object p1, + final Object p2, + final Object p3, + final Object p4, + final Object p5, + final Object p6, + final Object p7) { + logIfEnabled(FQCN, Level.TRACE, marker, message, p0, p1, p2, p3, p4, p5, p6, p7); + } + + @Override + public void trace( + final @Nullable Marker marker, + final String message, + final Object p0, + final Object p1, + final Object p2, + final Object p3, + final Object p4, + final Object p5, + final Object p6, + final Object p7, + final Object p8) { + logIfEnabled(FQCN, Level.TRACE, marker, message, p0, p1, p2, p3, p4, p5, p6, p7, p8); + } + + @Override + public void trace( + final @Nullable Marker marker, + final String message, + final Object p0, + final Object p1, + final Object p2, + final Object p3, + final Object p4, + final Object p5, + final Object p6, + final Object p7, + final Object p8, + final Object p9) { + logIfEnabled(FQCN, Level.TRACE, marker, message, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9); + } + + @Override + public void trace(final String message, final Object p0) { + logIfEnabled(FQCN, Level.TRACE, null, message, p0); + } + + @Override + public void trace(final String message, final Object p0, final Object p1) { + logIfEnabled(FQCN, Level.TRACE, null, message, p0, p1); + } + + @Override + public void trace(final String message, final Object p0, final Object p1, final Object p2) { + logIfEnabled(FQCN, Level.TRACE, null, message, p0, p1, p2); + } + + @Override + public void trace(final String message, final Object p0, final Object p1, final Object p2, final Object p3) { + logIfEnabled(FQCN, Level.TRACE, null, message, p0, p1, p2, p3); + } + + @Override + public void trace( + final String message, final Object p0, final Object p1, final Object p2, final Object p3, final Object p4) { + logIfEnabled(FQCN, Level.TRACE, null, message, p0, p1, p2, p3, p4); + } + + @Override + public void trace( + final String message, + final Object p0, + final Object p1, + final Object p2, + final Object p3, + final Object p4, + final Object p5) { + logIfEnabled(FQCN, Level.TRACE, null, message, p0, p1, p2, p3, p4, p5); + } + + @Override + public void trace( + final String message, + final Object p0, + final Object p1, + final Object p2, + final Object p3, + final Object p4, + final Object p5, + final Object p6) { + logIfEnabled(FQCN, Level.TRACE, null, message, p0, p1, p2, p3, p4, p5, p6); + } + + @Override + public void trace( + final String message, + final Object p0, + final Object p1, + final Object p2, + final Object p3, + final Object p4, + final Object p5, + final Object p6, + final Object p7) { + logIfEnabled(FQCN, Level.TRACE, null, message, p0, p1, p2, p3, p4, p5, p6, p7); + } + + @Override + public void trace( + final String message, + final Object p0, + final Object p1, + final Object p2, + final Object p3, + final Object p4, + final Object p5, + final Object p6, + final Object p7, + final Object p8) { + logIfEnabled(FQCN, Level.TRACE, null, message, p0, p1, p2, p3, p4, p5, p6, p7, p8); + } + + @Override + public void trace( + final String message, + final Object p0, + final Object p1, + final Object p2, + final Object p3, + final Object p4, + final Object p5, + final Object p6, + final Object p7, + final Object p8, + final Object p9) { + logIfEnabled(FQCN, Level.TRACE, null, message, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9); + } + + @Override + public void warn(final @Nullable Marker marker, final @Nullable Message message) { + logIfEnabled(FQCN, Level.WARN, marker, message, message != null ? message.getThrowable() : null); + } + + @Override + public void warn( + final @Nullable Marker marker, final @Nullable Message message, final @Nullable Throwable throwable) { + logIfEnabled(FQCN, Level.WARN, marker, message, throwable); + } + + @Override + public void warn(final @Nullable Marker marker, final CharSequence message) { + logIfEnabled(FQCN, Level.WARN, marker, message, null); + } + + @Override + public void warn(final @Nullable Marker marker, final CharSequence message, final @Nullable Throwable throwable) { + logIfEnabled(FQCN, Level.WARN, marker, message, throwable); + } + + @Override + public void warn(final @Nullable Marker marker, final Object message) { + logIfEnabled(FQCN, Level.WARN, marker, message, null); + } + + @Override + public void warn(final @Nullable Marker marker, final Object message, final @Nullable Throwable throwable) { + logIfEnabled(FQCN, Level.WARN, marker, message, throwable); + } + + @Override + public void warn(final @Nullable Marker marker, final String message) { + logIfEnabled(FQCN, Level.WARN, marker, message, (Throwable) null); + } + + @Override + public void warn(final @Nullable Marker marker, final String message, final Object... params) { + logIfEnabled(FQCN, Level.WARN, marker, message, params); + } + + @Override + public void warn(final @Nullable Marker marker, final String message, final @Nullable Throwable throwable) { + logIfEnabled(FQCN, Level.WARN, marker, message, throwable); + } + + @Override + public void warn(final @Nullable Message message) { + logIfEnabled(FQCN, Level.WARN, null, message, message != null ? message.getThrowable() : null); + } + + @Override + public void warn(final @Nullable Message message, final @Nullable Throwable throwable) { + logIfEnabled(FQCN, Level.WARN, null, message, throwable); + } + + @Override + public void warn(final CharSequence message) { + logIfEnabled(FQCN, Level.WARN, null, message, null); + } + + @Override + public void warn(final CharSequence message, final @Nullable Throwable throwable) { + logIfEnabled(FQCN, Level.WARN, null, message, throwable); + } + + @Override + public void warn(final Object message) { + logIfEnabled(FQCN, Level.WARN, null, message, null); + } + + @Override + public void warn(final Object message, final @Nullable Throwable throwable) { + logIfEnabled(FQCN, Level.WARN, null, message, throwable); + } + + @Override + public void warn(final String message) { + logIfEnabled(FQCN, Level.WARN, null, message, (Throwable) null); + } + + @Override + public void warn(final String message, final Object... params) { + logIfEnabled(FQCN, Level.WARN, null, message, params); + } + + @Override + public void warn(final String message, final @Nullable Throwable throwable) { + logIfEnabled(FQCN, Level.WARN, null, message, throwable); + } + + @Override + @SuppressWarnings("deprecation") + public void warn(final Supplier messageSupplier) { + logIfEnabled(FQCN, Level.WARN, null, messageSupplier, null); + } + + @Override + @SuppressWarnings("deprecation") + public void warn(final Supplier messageSupplier, final @Nullable Throwable throwable) { + logIfEnabled(FQCN, Level.WARN, null, messageSupplier, throwable); + } + + @Override + @SuppressWarnings("deprecation") + public void warn(final @Nullable Marker marker, final Supplier messageSupplier) { + logIfEnabled(FQCN, Level.WARN, marker, messageSupplier, null); + } + + @Override + @SuppressWarnings("deprecation") + public void warn(final @Nullable Marker marker, final String message, final Supplier... paramSuppliers) { + logIfEnabled(FQCN, Level.WARN, marker, message, paramSuppliers); + } + + @Override + @SuppressWarnings("deprecation") + public void warn( + final @Nullable Marker marker, final Supplier messageSupplier, final @Nullable Throwable throwable) { + logIfEnabled(FQCN, Level.WARN, marker, messageSupplier, throwable); + } + + @Override + @SuppressWarnings("deprecation") + public void warn(final String message, final Supplier... paramSuppliers) { + logIfEnabled(FQCN, Level.WARN, null, message, paramSuppliers); + } + + @Override + @SuppressWarnings("deprecation") + public void warn(final @Nullable Marker marker, final MessageSupplier messageSupplier) { + logIfEnabled(FQCN, Level.WARN, marker, messageSupplier, null); + } + + @Override + @SuppressWarnings("deprecation") + public void warn( + final @Nullable Marker marker, final MessageSupplier messageSupplier, final @Nullable Throwable throwable) { + logIfEnabled(FQCN, Level.WARN, marker, messageSupplier, throwable); + } + + @Override + @SuppressWarnings("deprecation") + public void warn(final MessageSupplier messageSupplier) { + logIfEnabled(FQCN, Level.WARN, null, messageSupplier, null); + } + + @Override + @SuppressWarnings("deprecation") + public void warn(final MessageSupplier messageSupplier, final @Nullable Throwable throwable) { + logIfEnabled(FQCN, Level.WARN, null, messageSupplier, throwable); + } + + @Override + public void warn(final @Nullable Marker marker, final String message, final Object p0) { + logIfEnabled(FQCN, Level.WARN, marker, message, p0); + } + + @Override + public void warn(final @Nullable Marker marker, final String message, final Object p0, final Object p1) { + logIfEnabled(FQCN, Level.WARN, marker, message, p0, p1); + } + + @Override + public void warn( + final @Nullable Marker marker, final String message, final Object p0, final Object p1, final Object p2) { + logIfEnabled(FQCN, Level.WARN, marker, message, p0, p1, p2); + } + + @Override + public void warn( + final @Nullable Marker marker, + final String message, + final Object p0, + final Object p1, + final Object p2, + final Object p3) { + logIfEnabled(FQCN, Level.WARN, marker, message, p0, p1, p2, p3); + } + + @Override + public void warn( + final @Nullable Marker marker, + final String message, + final Object p0, + final Object p1, + final Object p2, + final Object p3, + final Object p4) { + logIfEnabled(FQCN, Level.WARN, marker, message, p0, p1, p2, p3, p4); + } + + @Override + public void warn( + final @Nullable Marker marker, + final String message, + final Object p0, + final Object p1, + final Object p2, + final Object p3, + final Object p4, + final Object p5) { + logIfEnabled(FQCN, Level.WARN, marker, message, p0, p1, p2, p3, p4, p5); + } + + @Override + public void warn( + final @Nullable Marker marker, + final String message, + final Object p0, + final Object p1, + final Object p2, + final Object p3, + final Object p4, + final Object p5, + final Object p6) { + logIfEnabled(FQCN, Level.WARN, marker, message, p0, p1, p2, p3, p4, p5, p6); + } + + @Override + public void warn( + final @Nullable Marker marker, + final String message, + final Object p0, + final Object p1, + final Object p2, + final Object p3, + final Object p4, + final Object p5, + final Object p6, + final Object p7) { + logIfEnabled(FQCN, Level.WARN, marker, message, p0, p1, p2, p3, p4, p5, p6, p7); + } + + @Override + public void warn( + final @Nullable Marker marker, + final String message, + final Object p0, + final Object p1, + final Object p2, + final Object p3, + final Object p4, + final Object p5, + final Object p6, + final Object p7, + final Object p8) { + logIfEnabled(FQCN, Level.WARN, marker, message, p0, p1, p2, p3, p4, p5, p6, p7, p8); + } + + @Override + public void warn( + final @Nullable Marker marker, + final String message, + final Object p0, + final Object p1, + final Object p2, + final Object p3, + final Object p4, + final Object p5, + final Object p6, + final Object p7, + final Object p8, + final Object p9) { + logIfEnabled(FQCN, Level.WARN, marker, message, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9); + } + + @Override + public void warn(final String message, final Object p0) { + logIfEnabled(FQCN, Level.WARN, null, message, p0); + } + + @Override + public void warn(final String message, final Object p0, final Object p1) { + logIfEnabled(FQCN, Level.WARN, null, message, p0, p1); + } + + @Override + public void warn(final String message, final Object p0, final Object p1, final Object p2) { + logIfEnabled(FQCN, Level.WARN, null, message, p0, p1, p2); + } + + @Override + public void warn(final String message, final Object p0, final Object p1, final Object p2, final Object p3) { + logIfEnabled(FQCN, Level.WARN, null, message, p0, p1, p2, p3); + } + + @Override + public void warn( + final String message, final Object p0, final Object p1, final Object p2, final Object p3, final Object p4) { + logIfEnabled(FQCN, Level.WARN, null, message, p0, p1, p2, p3, p4); + } + + @Override + public void warn( + final String message, + final Object p0, + final Object p1, + final Object p2, + final Object p3, + final Object p4, + final Object p5) { + logIfEnabled(FQCN, Level.WARN, null, message, p0, p1, p2, p3, p4, p5); + } + + @Override + public void warn( + final String message, + final Object p0, + final Object p1, + final Object p2, + final Object p3, + final Object p4, + final Object p5, + final Object p6) { + logIfEnabled(FQCN, Level.WARN, null, message, p0, p1, p2, p3, p4, p5, p6); + } + + @Override + public void warn( + final String message, + final Object p0, + final Object p1, + final Object p2, + final Object p3, + final Object p4, + final Object p5, + final Object p6, + final Object p7) { + logIfEnabled(FQCN, Level.WARN, null, message, p0, p1, p2, p3, p4, p5, p6, p7); + } + + @Override + public void warn( + final String message, + final Object p0, + final Object p1, + final Object p2, + final Object p3, + final Object p4, + final Object p5, + final Object p6, + final Object p7, + final Object p8) { + logIfEnabled(FQCN, Level.WARN, null, message, p0, p1, p2, p3, p4, p5, p6, p7, p8); + } + + @Override + public void warn( + final String message, + final Object p0, + final Object p1, + final Object p2, + final Object p3, + final Object p4, + final Object p5, + final Object p6, + final Object p7, + final Object p8, + final Object p9) { + logIfEnabled(FQCN, Level.WARN, null, message, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9); + } + // + + // + private @Nullable EntryMessage enter(final @Nullable String format, final @Nullable Object... params) { + EntryMessage entryMessage = null; + if (isEnabled(Level.TRACE, ENTRY_MARKER)) { + entryMessage = logEnterMessage(FQCN, format, params); + } + return entryMessage; + } + + @Override + public final @Nullable EntryMessage traceEntry() { + return enter(null, EMPTY_PARAMS); + } + + @Override + public final @Nullable EntryMessage traceEntry(final String format, final Object... params) { + return enter(format, params); + } + + @SuppressWarnings("deprecation") + private @Nullable EntryMessage enter(final @Nullable String format, final Supplier... paramSuppliers) { + EntryMessage entryMessage = null; + if (isEnabled(Level.TRACE, ENTRY_MARKER)) { + entryMessage = logEnterMessage(FQCN, format, LambdaUtil.getAll(paramSuppliers)); + } + return entryMessage; + } + + @Override + @SuppressWarnings("deprecation") + public final @Nullable EntryMessage traceEntry(final Supplier... paramSuppliers) { + return enter(null, paramSuppliers); + } + + @Override + @SuppressWarnings("deprecation") + public final @Nullable EntryMessage traceEntry(final String format, final Supplier... paramSuppliers) { + return enter(format, paramSuppliers); + } + + @Override + public final @Nullable EntryMessage traceEntry(final @Nullable Message message) { + EntryMessage entryMessage = null; + if (isEnabled(Level.TRACE, ENTRY_MARKER)) { + entryMessage = logEnterMessage(FQCN, message); + } + return entryMessage; + } + + private @Nullable R exit(final @Nullable String format, final @Nullable R result) { + if (isEnabled(Level.TRACE, EXIT_MARKER)) { + logExitMessage(FQCN, format, result); + } + return result; + } + + @Override + public final void traceExit() { + exit((String) null, null); + } + + @Override + public final @Nullable R traceExit(final @Nullable R result) { + return exit((String) null, result); + } + + @Override + public final @Nullable R traceExit(final String format, final @Nullable R result) { + return exit(format, result); + } + + private @Nullable R exit(final @Nullable EntryMessage message, final @Nullable R result) { + // If the message is null, traceEnter returned null because flow logging was disabled, we can optimize out + // calling isEnabled(). + if (message != null && isEnabled(Level.TRACE, EXIT_MARKER, message, null)) { + logExitMessage(FQCN, message, result); + } + return result; + } + + @Override + public final void traceExit(final EntryMessage message) { + exit(message, null); + } + + @Override + public final @Nullable R traceExit(final EntryMessage message, final @Nullable R result) { + return exit(message, result); + } + + @Override + public final @Nullable R traceExit(final @Nullable Message message, final @Nullable R result) { + // If the message is null, traceEnter returned null because flow logging was disabled, we can optimize out + // calling isEnabled(). + if (message != null && isEnabled(Level.TRACE, EXIT_MARKER, message, null)) { + logExitMessage(FQCN, message, result); + } + return result; + } + + @Override + public void entry() { + enter(null, EMPTY_PARAMS); + } + + @Override + public void entry(final Object... params) { + enter(null, params); + } + + @Override + public void exit() { + exit((String) null, null); + } + + @Override + public R exit(final R result) { + return exit((String) null, result); + } + // + + // + @Override + public final void catching(final Level level, final @Nullable Throwable throwable) { + if (isEnabled(level, CATCHING_MARKER)) { + logCatchingMessage(FQCN, level, throwable); + } + } + + @Override + public final void catching(final @Nullable Throwable throwable) { + catching(Level.ERROR, throwable); + } + + @Override + public final void printf( + final Level level, final @Nullable Marker marker, final String format, final Object... params) { + if (isEnabled(level, marker, format, params)) { + logPrintfMessage(FQCN, level, marker, format, params); + } + } + + @Override + public final void printf(final Level level, final String format, final Object... params) { + printf(level, null, format, params); + } + + @Override + public final T throwing(final T throwable) { + return throwing(Level.ERROR, throwable); + } + + @Override + public final T throwing(final Level level, final T throwable) { + if (isEnabled(level, THROWING_MARKER)) { + logThrowingMessage(FQCN, level, throwable); + } + return throwable; + } + + @SuppressWarnings("unchecked") + @Override + public MF getMessageFactory() { + return (MF) messageFactory; + } + + @Override + public FlowMessageFactory getFlowMessageFactory() { + return flowMessageFactory; + } + + @Override + public String getName() { + return name; + } + // + + // +} diff --git a/log4j-kit/src/main/java/org/apache/logging/log4j/kit/logger/internal/DefaultLogBuilder.java b/log4j-kit/src/main/java/org/apache/logging/log4j/kit/logger/internal/DefaultLogBuilder.java new file mode 100644 index 00000000000..47052fd14da --- /dev/null +++ b/log4j-kit/src/main/java/org/apache/logging/log4j/kit/logger/internal/DefaultLogBuilder.java @@ -0,0 +1,413 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to you under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.logging.log4j.kit.logger.internal; + +import java.util.Arrays; +import org.apache.logging.log4j.BridgeAware; +import org.apache.logging.log4j.Level; +import org.apache.logging.log4j.LogBuilder; +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.spi.recycler.Recycler; +import org.apache.logging.log4j.spi.recycler.RecyclerAware; +import org.apache.logging.log4j.util.LambdaUtil; +import org.apache.logging.log4j.util.StackLocatorUtil; +import org.apache.logging.log4j.util.Strings; +import org.apache.logging.log4j.util.Supplier; + +/** + * Collects data for a log event and then logs it. This class should be considered private. + */ +public class DefaultLogBuilder implements BridgeAware, LogBuilder, RecyclerAware { + + private static final String FQCN = DefaultLogBuilder.class.getName(); + private static final Message EMPTY_MESSAGE = new SimpleMessage(Strings.EMPTY); + + private ExtendedLogger logger; + private Level level; + private Marker marker; + private Throwable throwable; + private StackTraceElement location; + private String fqcn = FQCN; + private Recycler recycler; + + public DefaultLogBuilder(final ExtendedLogger logger, final Level level) { + this.logger = logger; + this.level = level; + } + + public DefaultLogBuilder() { + this(null, null); + } + + @Override + public void setEntryPoint(final String fqcn) { + this.fqcn = fqcn; + } + + /** + * This method should be considered internal. It is used to reset the LogBuilder for a new log message. + * @param level The logging level for this event. + * @return This LogBuilder instance. + */ + public LogBuilder reset(final ExtendedLogger logger, final Level level) { + this.logger = logger; + this.level = level; + this.marker = null; + this.throwable = null; + this.location = null; + return this; + } + + @Override + public LogBuilder withMarker(final Marker marker) { + this.marker = marker; + return this; + } + + @Override + public LogBuilder withThrowable(final Throwable throwable) { + this.throwable = throwable; + return this; + } + + @Override + public LogBuilder withLocation() { + location = StackLocatorUtil.getStackTraceElement(2); + return this; + } + + @Override + public LogBuilder withLocation(final StackTraceElement location) { + this.location = location; + return this; + } + + @Override + public void log(final Message message) { + if (isEnabled(message)) { + logMessage(message); + } + } + + @Override + @SuppressWarnings("deprecation") + public Message logAndGet(final Supplier messageSupplier) { + Message message = null; + if (isEnabled(message = messageSupplier.get())) { + logMessage(message); + } + return message; + } + + @Override + public void log(final CharSequence message) { + if (isEnabled(message)) { + logMessage(logger.getMessageFactory().newMessage(message)); + } + } + + @Override + public void log(final String message) { + if (isEnabled(message)) { + logMessage(logger.getMessageFactory().newMessage(message)); + } + } + + @Override + public void log(final String message, final Object... params) { + if (isEnabled(message, params)) { + logMessage(logger.getMessageFactory().newMessage(message, params)); + } + } + + @Override + @SuppressWarnings("deprecation") + public void log(String message, Supplier... params) { + final Object[] objs; + if (isEnabled(message, objs = LambdaUtil.getAll(params))) { + logMessage(logger.getMessageFactory().newMessage(message, objs)); + } + } + + @Override + @SuppressWarnings("deprecation") + public void log(final Supplier messageSupplier) { + logAndGet(messageSupplier); + } + + @Override + public void log(final Object message) { + if (isEnabled(message)) { + logMessage(logger.getMessageFactory().newMessage(message)); + } + } + + @Override + public void log(final String message, final Object p0) { + if (isEnabled(message, p0)) { + logMessage(logger.getMessageFactory().newMessage(message, p0)); + } + } + + @Override + public void log(final String message, final Object p0, final Object p1) { + if (isEnabled(message, p0, p1)) { + logMessage(logger.getMessageFactory().newMessage(message, p0, p1)); + } + } + + @Override + public void log(final String message, final Object p0, final Object p1, final Object p2) { + if (isEnabled(message, p0, p1, p2)) { + logMessage(logger.getMessageFactory().newMessage(message, p0, p1, p2)); + } + } + + @Override + public void log(final String message, final Object p0, final Object p1, final Object p2, final Object p3) { + if (isEnabled(message, p0, p1, p2, p3)) { + logMessage(logger.getMessageFactory().newMessage(message, p0, p1, p2, p3)); + } + } + + @Override + public void log( + final String message, final Object p0, final Object p1, final Object p2, final Object p3, final Object p4) { + if (isEnabled(message, p0, p1, p2, p3, p4)) { + logMessage(logger.getMessageFactory().newMessage(message, p0, p1, p2, p3, p4)); + } + } + + @Override + public void log( + final String message, + final Object p0, + final Object p1, + final Object p2, + final Object p3, + final Object p4, + final Object p5) { + if (isEnabled(message, p0, p1, p2, p3, p4, p5)) { + logMessage(logger.getMessageFactory().newMessage(message, p0, p1, p2, p3, p4, p5)); + } + } + + @Override + public void log( + final String message, + final Object p0, + final Object p1, + final Object p2, + final Object p3, + final Object p4, + final Object p5, + final Object p6) { + if (isEnabled(message, p0, p1, p2, p3, p4, p5, p6)) { + logMessage(logger.getMessageFactory().newMessage(message, p0, p1, p2, p3, p4, p5, p6)); + } + } + + @Override + public void log( + final String message, + final Object p0, + final Object p1, + final Object p2, + final Object p3, + final Object p4, + final Object p5, + final Object p6, + final Object p7) { + if (isEnabled(message, p0, p1, p2, p3, p4, p5, p6, p7)) { + logMessage(logger.getMessageFactory().newMessage(message, p0, p1, p2, p3, p4, p5, p6, p7)); + } + } + + @Override + public void log( + final String message, + final Object p0, + final Object p1, + final Object p2, + final Object p3, + final Object p4, + final Object p5, + final Object p6, + final Object p7, + final Object p8) { + if (isEnabled(message, p0, p1, p2, p3, p4, p5, p6, p7, p8)) { + logMessage(logger.getMessageFactory().newMessage(message, p0, p1, p2, p3, p4, p5, p6, p7, p8)); + } + } + + @Override + public void log( + final String message, + final Object p0, + final Object p1, + final Object p2, + final Object p3, + final Object p4, + final Object p5, + final Object p6, + final Object p7, + final Object p8, + final Object p9) { + if (isEnabled(message, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9)) { + logMessage(logger.getMessageFactory().newMessage(message, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9)); + } + } + + @Override + public void log() { + if (isEnabled(EMPTY_MESSAGE)) { + logMessage(EMPTY_MESSAGE); + } + } + + private void logMessage(final Message message) { + try { + logger.logMessage(level, marker, fqcn, location, message, throwable); + } finally { + this.level = null; + this.marker = null; + this.throwable = null; + this.location = null; + if (recycler != null) { + recycler.release(this); + } + } + } + + protected boolean isEnabled(Message message) { + return logger.isEnabled(level, marker, message, throwable); + } + + protected boolean isEnabled(CharSequence message) { + return logger.isEnabled(level, marker, message, throwable); + } + + protected boolean isEnabled(String message) { + return logger.isEnabled(level, marker, message, throwable); + } + + protected boolean isEnabled(String message, Object... params) { + final Object[] newParams; + if (throwable != null) { + newParams = Arrays.copyOf(params, params.length + 1); + newParams[params.length] = throwable; + } else { + newParams = params; + } + return logger.isEnabled(level, marker, message, newParams); + } + + protected boolean isEnabled(Object message) { + return logger.isEnabled(level, marker, message, throwable); + } + + protected boolean isEnabled(String message, Object p0) { + return throwable != null + ? logger.isEnabled(level, marker, message, p0, throwable) + : logger.isEnabled(level, marker, message, p0); + } + + protected boolean isEnabled(String message, Object p0, Object p1) { + return throwable != null + ? logger.isEnabled(level, marker, message, p0, p1, throwable) + : logger.isEnabled(level, marker, message, p0, p1); + } + + protected boolean isEnabled(String message, Object p0, Object p1, Object p2) { + return throwable != null + ? logger.isEnabled(level, marker, message, p0, p1, p2, throwable) + : logger.isEnabled(level, marker, message, p0, p1, p2); + } + + protected boolean isEnabled(String message, Object p0, Object p1, Object p2, Object p3) { + return throwable != null + ? logger.isEnabled(level, marker, message, p0, p1, p2, p3, throwable) + : logger.isEnabled(level, marker, message, p0, p1, p2, p3); + } + + protected boolean isEnabled(String message, Object p0, Object p1, Object p2, Object p3, Object p4) { + return throwable != null + ? logger.isEnabled(level, marker, message, p0, p1, p2, p3, p4, throwable) + : logger.isEnabled(level, marker, message, p0, p1, p2, p3, p4); + } + + protected boolean isEnabled(String message, Object p0, Object p1, Object p2, Object p3, Object p4, Object p5) { + return throwable != null + ? logger.isEnabled(level, marker, message, p0, p1, p2, p3, p4, p5, throwable) + : logger.isEnabled(level, marker, message, p0, p1, p2, p3, p4, p5); + } + + protected boolean isEnabled( + String message, Object p0, Object p1, Object p2, Object p3, Object p4, Object p5, Object p6) { + return throwable != null + ? logger.isEnabled(level, marker, message, p0, p1, p2, p3, p4, p5, p6, throwable) + : logger.isEnabled(level, marker, message, p0, p1, p2, p3, p4, p5, p6); + } + + protected boolean isEnabled( + String message, Object p0, Object p1, Object p2, Object p3, Object p4, Object p5, Object p6, Object p7) { + return throwable != null + ? logger.isEnabled(level, marker, message, p0, p1, p2, p3, p4, p5, p6, p7, throwable) + : logger.isEnabled(level, marker, message, p0, p1, p2, p3, p4, p5, p6, p7); + } + + protected boolean isEnabled( + String message, + Object p0, + Object p1, + Object p2, + Object p3, + Object p4, + Object p5, + Object p6, + Object p7, + Object p8) { + return throwable != null + ? logger.isEnabled(level, marker, message, p0, p1, p2, p3, p4, p5, p6, p7, p8, throwable) + : logger.isEnabled(level, marker, message, p0, p1, p2, p3, p4, p5, p6, p7, p8); + } + + 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) { + return throwable != null + ? logger.isEnabled(level, marker, message, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, throwable) + : logger.isEnabled(level, marker, message, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9); + } + + @Override + public void setRecycler(Recycler recycler) { + this.recycler = recycler; + } +} diff --git a/log4j-kit/src/main/java/org/apache/logging/log4j/kit/logger/package-info.java b/log4j-kit/src/main/java/org/apache/logging/log4j/kit/logger/package-info.java new file mode 100644 index 00000000000..84e7e300bb1 --- /dev/null +++ b/log4j-kit/src/main/java/org/apache/logging/log4j/kit/logger/package-info.java @@ -0,0 +1,22 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache license, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the license for the specific language governing permissions and + * limitations under the license. + */ +@Export +@Version("3.0.0") +package org.apache.logging.log4j.kit.logger; + +import org.osgi.annotation.bundle.Export; +import org.osgi.annotation.versioning.Version; diff --git a/log4j-kit/src/test/java/org/apache/logging/log4j/kit/logger/AbstractLoggerTest.java b/log4j-kit/src/test/java/org/apache/logging/log4j/kit/logger/AbstractLoggerTest.java new file mode 100644 index 00000000000..adc350922ea --- /dev/null +++ b/log4j-kit/src/test/java/org/apache/logging/log4j/kit/logger/AbstractLoggerTest.java @@ -0,0 +1,71 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to you under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.logging.log4j.kit.logger; + +import static org.assertj.core.api.Assertions.assertThat; + +import java.io.DataInputStream; +import java.io.InputStream; +import java.util.Set; +import javassist.bytecode.ClassFile; +import javassist.bytecode.CodeAttribute; +import javassist.bytecode.MethodInfo; +import org.junit.jupiter.api.Test; + +public class AbstractLoggerTest { + + private static final int MAX_INLINE_SIZE = 35; + /** + * List of methods that currently don't fit into 35 bytes. + */ + private static final Set NOT_INLINED_METHOD_PREFIXES = Set.of( + "()V", + "(", + "handleLogMessageException(Ljava/lang/Throwable;Ljava/lang/String;Lorg/apache/logging/log4j/message/Message;)V", + // logging methods with Supplier, MessageSupplier or more than 2 parameters + "logMessage(Ljava/lang/String;Lorg/apache/logging/log4j/Level;Lorg/apache/logging/log4j/Marker;Lorg/apache/logging/log4j/util/MessageSupplier;Ljava/lang/Throwable;)V", + "logMessage(Ljava/lang/String;Lorg/apache/logging/log4j/Level;Lorg/apache/logging/log4j/Marker;Lorg/apache/logging/log4j/util/Supplier;Ljava/lang/Throwable;)V", + "logMessage(Ljava/lang/String;Lorg/apache/logging/log4j/Level;Lorg/apache/logging/log4j/Marker;Ljava/lang/String;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;", + "logMessage(Ljava/lang/String;Lorg/apache/logging/log4j/Level;Lorg/apache/logging/log4j/Marker;Ljava/lang/String;[Lorg/apache/logging/log4j/util/Supplier;)V", + // logging methods with more than 3 parameters + "logIfEnabled(Ljava/lang/String;Lorg/apache/logging/log4j/Level;Lorg/apache/logging/log4j/Marker;Ljava/lang/String;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;"); + + @Test + void does_not_exceed_MaxInlineSize() throws Exception { + try (final InputStream is = AbstractLoggerTest.class.getResourceAsStream("AbstractLogger.class")) { + final ClassFile classFile = new ClassFile(new DataInputStream(is)); + for (final MethodInfo methodInfo : classFile.getMethods()) { + final String key = methodInfo.getName() + methodInfo.getDescriptor(); + final CodeAttribute code = methodInfo.getCodeAttribute(); + if (code != null && shouldBeInlined(key)) { + assertThat(code.getCodeLength()) + .as("Method %s is within MaxInlineSize threshold.", key) + .isLessThanOrEqualTo(MAX_INLINE_SIZE); + } + } + } + } + + private static boolean shouldBeInlined(final String key) { + for (final String prefix : NOT_INLINED_METHOD_PREFIXES) { + if (key.startsWith(prefix)) { + return false; + } + } + return true; + } +} diff --git a/log4j-osgi-test/src/test/java/org/apache/logging/log4j/osgi/tests/AbstractLoadBundleTest.java b/log4j-osgi-test/src/test/java/org/apache/logging/log4j/osgi/tests/AbstractLoadBundleTest.java index 7b4b5f449c4..5a957cda945 100644 --- a/log4j-osgi-test/src/test/java/org/apache/logging/log4j/osgi/tests/AbstractLoadBundleTest.java +++ b/log4j-osgi-test/src/test/java/org/apache/logging/log4j/osgi/tests/AbstractLoadBundleTest.java @@ -80,6 +80,10 @@ private Bundle getPluginsBundle() throws BundleException { return installBundle("org.apache.logging.log4j.plugins"); } + private Bundle getKitBundle() throws BundleException { + return installBundle("org.apache.logging.log4j.kit"); + } + private Bundle getCoreBundle() throws BundleException { return installBundle("org.apache.logging.log4j.core"); } @@ -101,21 +105,23 @@ public void testApiCoreStartStopStartStop() throws BundleException { final List spiFly = startApacheSpiFly(); final Bundle api = getApiBundle(); final Bundle plugins = getPluginsBundle(); + final Bundle kit = getKitBundle(); final Bundle core = getCoreBundle(); - Assert.assertEquals("api is not in INSTALLED state", Bundle.INSTALLED, api.getState()); - Assert.assertEquals("plugins is not in INSTALLED state", Bundle.INSTALLED, plugins.getState()); - Assert.assertEquals("core is not in INSTALLED state", Bundle.INSTALLED, core.getState()); + assertEquals("api is not in INSTALLED state", Bundle.INSTALLED, api.getState()); + assertEquals("plugins is not in INSTALLED state", Bundle.INSTALLED, plugins.getState()); + assertEquals("kit is not in INSTALLED state", Bundle.INSTALLED, kit.getState()); + assertEquals("core is not in INSTALLED state", Bundle.INSTALLED, core.getState()); // 1st start-stop - doOnBundlesAndVerifyState(Bundle::start, Bundle.ACTIVE, api, plugins, core); - doOnBundlesAndVerifyState(Bundle::stop, Bundle.RESOLVED, core, plugins, api); + doOnBundlesAndVerifyState(Bundle::start, Bundle.ACTIVE, api, kit, plugins, core); + doOnBundlesAndVerifyState(Bundle::stop, Bundle.RESOLVED, core, plugins, kit, api); // 2nd start-stop - doOnBundlesAndVerifyState(Bundle::start, Bundle.ACTIVE, api, plugins, core); - doOnBundlesAndVerifyState(Bundle::stop, Bundle.RESOLVED, core, plugins, api); + doOnBundlesAndVerifyState(Bundle::start, Bundle.ACTIVE, api, kit, plugins, core); + doOnBundlesAndVerifyState(Bundle::stop, Bundle.RESOLVED, core, plugins, kit, api); - doOnBundlesAndVerifyState(Bundle::uninstall, Bundle.UNINSTALLED, core, plugins, api); + doOnBundlesAndVerifyState(Bundle::uninstall, Bundle.UNINSTALLED, core, plugins, kit, api); uninstall(spiFly); } @@ -128,9 +134,10 @@ public void testClassNotFoundErrorLogger() throws BundleException { final List spiFly = startApacheSpiFly(); final Bundle api = getApiBundle(); final Bundle plugins = getPluginsBundle(); + final Bundle kit = getKitBundle(); final Bundle core = getCoreBundle(); - doOnBundlesAndVerifyState(Bundle::start, Bundle.ACTIVE, api, plugins); + doOnBundlesAndVerifyState(Bundle::start, Bundle.ACTIVE, api, kit, plugins); // fails if LOG4J2-1637 is not fixed try { core.start(); @@ -150,8 +157,8 @@ public void testClassNotFoundErrorLogger() throws BundleException { } assertEquals(String.format("`%s` bundle state mismatch", core), Bundle.ACTIVE, core.getState()); - doOnBundlesAndVerifyState(Bundle::stop, Bundle.RESOLVED, core, plugins, api); - doOnBundlesAndVerifyState(Bundle::uninstall, Bundle.UNINSTALLED, core, plugins, api); + doOnBundlesAndVerifyState(Bundle::stop, Bundle.RESOLVED, core, plugins, kit, api); + doOnBundlesAndVerifyState(Bundle::uninstall, Bundle.UNINSTALLED, core, plugins, kit, api); uninstall(spiFly); } @@ -164,17 +171,18 @@ public void testLog4J12Fragement() throws BundleException, ReflectiveOperationEx final List spiFly = startApacheSpiFly(); final Bundle api = getApiBundle(); + final Bundle kit = getKitBundle(); final Bundle plugins = getPluginsBundle(); final Bundle core = getCoreBundle(); final Bundle compat = get12ApiBundle(); - doOnBundlesAndVerifyState(Bundle::start, Bundle.ACTIVE, api, plugins, core); + doOnBundlesAndVerifyState(Bundle::start, Bundle.ACTIVE, api, kit, plugins, core); final Class coreClassFromCore = core.loadClass("org.apache.logging.log4j.core.Core"); final Class levelClassFrom12API = core.loadClass("org.apache.log4j.Level"); final Class levelClassFromAPI = core.loadClass("org.apache.logging.log4j.Level"); - Assert.assertEquals( + assertEquals( "expected 1.2 API Level to have the same class loader as Core", levelClassFrom12API.getClassLoader(), coreClassFromCore.getClassLoader()); @@ -183,8 +191,8 @@ public void testLog4J12Fragement() throws BundleException, ReflectiveOperationEx levelClassFrom12API.getClassLoader(), levelClassFromAPI.getClassLoader()); - doOnBundlesAndVerifyState(Bundle::stop, Bundle.RESOLVED, core, plugins, api); - doOnBundlesAndVerifyState(Bundle::uninstall, Bundle.UNINSTALLED, compat, core, plugins, api); + doOnBundlesAndVerifyState(Bundle::stop, Bundle.RESOLVED, core, plugins, kit, api); + doOnBundlesAndVerifyState(Bundle::uninstall, Bundle.UNINSTALLED, compat, core, plugins, kit, api); uninstall(spiFly); } diff --git a/log4j-osgi-test/src/test/java/org/apache/logging/log4j/osgi/tests/CoreOsgiTest.java b/log4j-osgi-test/src/test/java/org/apache/logging/log4j/osgi/tests/CoreOsgiTest.java index 2d5ee6c23b0..c3f9bd15bee 100644 --- a/log4j-osgi-test/src/test/java/org/apache/logging/log4j/osgi/tests/CoreOsgiTest.java +++ b/log4j-osgi-test/src/test/java/org/apache/logging/log4j/osgi/tests/CoreOsgiTest.java @@ -48,6 +48,7 @@ public Option[] config() { return options( linkBundle("org.apache.logging.log4j.api"), linkBundle("org.apache.logging.log4j.plugins"), + linkBundle("org.apache.logging.log4j.kit"), linkBundle("org.apache.logging.log4j.core"), linkBundle("org.apache.logging.log4j.1.2.api").start(false), // required by Pax Exam's logging diff --git a/pom.xml b/pom.xml index 8e72a918907..e2a62862271 100644 --- a/pom.xml +++ b/pom.xml @@ -253,6 +253,7 @@ log4j-jndi-test log4j-jpl log4j-jul + log4j-kit log4j-kubernetes log4j-layout-template-json log4j-layout-template-json-test @@ -511,6 +512,12 @@ ${project.version}
+ + org.apache.logging.log4j + log4j-kit + ${project.version} + + org.apache.logging.log4j log4j-slf4j2-impl