Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,9 @@
*/
package org.apache.logging.log4j.message;

import java.util.Objects;
import java.util.ResourceBundle;
import org.jspecify.annotations.Nullable;

/**
* Creates {@link FormattedMessage} instances for {@link MessageFactory2} methods (and {@link MessageFactory} by
Expand All @@ -33,8 +35,11 @@
public class LocalizedMessageFactory extends AbstractMessageFactory {
private static final long serialVersionUID = -1996295808703146741L;

@Nullable
// FIXME: cannot use ResourceBundle name for serialization until Java 8
private final transient ResourceBundle resourceBundle;

@Nullable
private final String baseName;

public LocalizedMessageFactory(final ResourceBundle resourceBundle) {
Expand Down Expand Up @@ -92,4 +97,21 @@ public Message newMessage(final String key, final Object... params) {
}
return new LocalizedMessage(resourceBundle, key, params);
}

@Override
public boolean equals(final Object object) {
if (this == object) {
return true;
}
if (object == null || getClass() != object.getClass()) {
return false;
}
final LocalizedMessageFactory that = (LocalizedMessageFactory) object;
return Objects.equals(resourceBundle, that.resourceBundle) && Objects.equals(baseName, that.baseName);
}

@Override
public int hashCode() {
return Objects.hash(resourceBundle, baseName);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@
* Public Message Types used for Log4j 2. Users may implement their own Messages.
*/
@Export
@Version("2.24.0")
@Version("2.24.1")
package org.apache.logging.log4j.message;

import org.osgi.annotation.bundle.Export;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,12 +20,13 @@
import java.io.PrintStream;
import org.apache.logging.log4j.Level;
import org.apache.logging.log4j.message.MessageFactory;
import org.apache.logging.log4j.message.ParameterizedMessageFactory;
import org.apache.logging.log4j.simple.internal.SimpleProvider;
import org.apache.logging.log4j.spi.AbstractLogger;
import org.apache.logging.log4j.spi.ExtendedLogger;
import org.apache.logging.log4j.spi.LoggerContext;
import org.apache.logging.log4j.spi.LoggerRegistry;
import org.apache.logging.log4j.util.PropertiesUtil;
import org.jspecify.annotations.Nullable;

/**
* A simple {@link LoggerContext} implementation.
Expand All @@ -41,6 +42,8 @@ public class SimpleLoggerContext implements LoggerContext {
/** All system properties used by <code>SimpleLog</code> start with this */
protected static final String SYSTEM_PREFIX = "org.apache.logging.log4j.simplelog.";

private static final MessageFactory DEFAULT_MESSAGE_FACTORY = ParameterizedMessageFactory.INSTANCE;

private final PropertiesUtil props;

/** Include the instance name in the log message? */
Expand Down Expand Up @@ -96,14 +99,20 @@ public ExtendedLogger getLogger(final String name) {
}

@Override
public ExtendedLogger getLogger(final String name, final MessageFactory messageFactory) {
// Note: This is the only method where we add entries to the 'loggerRegistry' ivar.
final ExtendedLogger extendedLogger = loggerRegistry.getLogger(name, messageFactory);
if (extendedLogger != null) {
AbstractLogger.checkMessageFactory(extendedLogger, messageFactory);
return extendedLogger;
public ExtendedLogger getLogger(final String name, @Nullable final MessageFactory messageFactory) {
final MessageFactory effectiveMessageFactory =
messageFactory != null ? messageFactory : DEFAULT_MESSAGE_FACTORY;
final ExtendedLogger oldLogger = loggerRegistry.getLogger(name, effectiveMessageFactory);
if (oldLogger != null) {
return oldLogger;
}
final SimpleLogger simpleLogger = new SimpleLogger(
final ExtendedLogger newLogger = createLogger(name, effectiveMessageFactory);
loggerRegistry.putIfAbsent(name, effectiveMessageFactory, newLogger);
return loggerRegistry.getLogger(name, effectiveMessageFactory);
}

private ExtendedLogger createLogger(final String name, @Nullable final MessageFactory messageFactory) {
return new SimpleLogger(
name,
defaultLevel,
showLogName,
Expand All @@ -114,8 +123,6 @@ public ExtendedLogger getLogger(final String name, final MessageFactory messageF
messageFactory,
props,
stream);
loggerRegistry.putIfAbsent(name, messageFactory, simpleLogger);
return loggerRegistry.getLogger(name, messageFactory);
}

/**
Expand All @@ -131,16 +138,18 @@ public LoggerRegistry<ExtendedLogger> getLoggerRegistry() {

@Override
public boolean hasLogger(final String name) {
return false;
return loggerRegistry.hasLogger(name, DEFAULT_MESSAGE_FACTORY);
}

@Override
public boolean hasLogger(final String name, final Class<? extends MessageFactory> messageFactoryClass) {
return false;
return loggerRegistry.hasLogger(name, messageFactoryClass);
}

@Override
public boolean hasLogger(final String name, final MessageFactory messageFactory) {
return false;
public boolean hasLogger(final String name, @Nullable final MessageFactory messageFactory) {
final MessageFactory effectiveMessageFactory =
messageFactory != null ? messageFactory : DEFAULT_MESSAGE_FACTORY;
return loggerRegistry.hasLogger(name, effectiveMessageFactory);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@
* Providers are able to be loaded at runtime.
*/
@Export
@Version("2.24.0")
@Version("2.24.1")
package org.apache.logging.log4j.simple;

import org.osgi.annotation.bundle.Export;
Expand Down
Loading