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 @@ -30,7 +30,6 @@
import org.apache.logging.log4j.util.LoaderUtil;
import org.slf4j.Marker;
import org.slf4j.MarkerFactory;
import org.slf4j.impl.StaticMarkerBinder;
import org.slf4j.spi.LocationAwareLogger;

/**
Expand All @@ -47,8 +46,10 @@ public class Log4jLogger implements LocationAwareLogger, Serializable {
private final boolean eventLogger;
private transient ExtendedLogger logger;
private final String name;
private transient Log4jMarkerFactory markerFactory;

public Log4jLogger(final ExtendedLogger logger, final String name) {
public Log4jLogger(final Log4jMarkerFactory markerFactory, final ExtendedLogger logger, final String name) {
this.markerFactory = markerFactory;
this.logger = logger;
this.eventLogger = "EventLogger".equals(name);
this.name = name;
Expand Down Expand Up @@ -86,32 +87,32 @@ public boolean isTraceEnabled() {

@Override
public boolean isTraceEnabled(final Marker marker) {
return logger.isEnabled(Level.TRACE, getMarker(marker), null);
return logger.isEnabled(Level.TRACE, markerFactory.getLog4jMarker(marker), null);
}

@Override
public void trace(final Marker marker, final String s) {
logger.logIfEnabled(FQCN, Level.TRACE, getMarker(marker), s);
logger.logIfEnabled(FQCN, Level.TRACE, markerFactory.getLog4jMarker(marker), s);
}

@Override
public void trace(final Marker marker, final String s, final Object o) {
logger.logIfEnabled(FQCN, Level.TRACE, getMarker(marker), s, o);
logger.logIfEnabled(FQCN, Level.TRACE, markerFactory.getLog4jMarker(marker), s, o);
}

@Override
public void trace(final Marker marker, final String s, final Object o, final Object o1) {
logger.logIfEnabled(FQCN, Level.TRACE, getMarker(marker), s, o, o1);
logger.logIfEnabled(FQCN, Level.TRACE, markerFactory.getLog4jMarker(marker), s, o, o1);
}

@Override
public void trace(final Marker marker, final String s, final Object... objects) {
logger.logIfEnabled(FQCN, Level.TRACE, getMarker(marker), s, objects);
logger.logIfEnabled(FQCN, Level.TRACE, markerFactory.getLog4jMarker(marker), s, objects);
}

@Override
public void trace(final Marker marker, final String s, final Throwable throwable) {
logger.logIfEnabled(FQCN, Level.TRACE, getMarker(marker), s, throwable);
logger.logIfEnabled(FQCN, Level.TRACE, markerFactory.getLog4jMarker(marker), s, throwable);
}

@Override
Expand Down Expand Up @@ -146,32 +147,32 @@ public boolean isDebugEnabled() {

@Override
public boolean isDebugEnabled(final Marker marker) {
return logger.isEnabled(Level.DEBUG, getMarker(marker), null);
return logger.isEnabled(Level.DEBUG, markerFactory.getLog4jMarker(marker), null);
}

@Override
public void debug(final Marker marker, final String s) {
logger.logIfEnabled(FQCN, Level.DEBUG, getMarker(marker), s);
logger.logIfEnabled(FQCN, Level.DEBUG, markerFactory.getLog4jMarker(marker), s);
}

@Override
public void debug(final Marker marker, final String s, final Object o) {
logger.logIfEnabled(FQCN, Level.DEBUG, getMarker(marker), s, o);
logger.logIfEnabled(FQCN, Level.DEBUG, markerFactory.getLog4jMarker(marker), s, o);
}

@Override
public void debug(final Marker marker, final String s, final Object o, final Object o1) {
logger.logIfEnabled(FQCN, Level.DEBUG, getMarker(marker), s, o, o1);
logger.logIfEnabled(FQCN, Level.DEBUG, markerFactory.getLog4jMarker(marker), s, o, o1);
}

@Override
public void debug(final Marker marker, final String s, final Object... objects) {
logger.logIfEnabled(FQCN, Level.DEBUG, getMarker(marker), s, objects);
logger.logIfEnabled(FQCN, Level.DEBUG, markerFactory.getLog4jMarker(marker), s, objects);
}

@Override
public void debug(final Marker marker, final String s, final Throwable throwable) {
logger.logIfEnabled(FQCN, Level.DEBUG, getMarker(marker), s, throwable);
logger.logIfEnabled(FQCN, Level.DEBUG, markerFactory.getLog4jMarker(marker), s, throwable);
}

@Override
Expand Down Expand Up @@ -206,32 +207,32 @@ public boolean isInfoEnabled() {

@Override
public boolean isInfoEnabled(final Marker marker) {
return logger.isEnabled(Level.INFO, getMarker(marker), null);
return logger.isEnabled(Level.INFO, markerFactory.getLog4jMarker(marker), null);
}

@Override
public void info(final Marker marker, final String s) {
logger.logIfEnabled(FQCN, Level.INFO, getMarker(marker), s);
logger.logIfEnabled(FQCN, Level.INFO, markerFactory.getLog4jMarker(marker), s);
}

@Override
public void info(final Marker marker, final String s, final Object o) {
logger.logIfEnabled(FQCN, Level.INFO, getMarker(marker), s, o);
logger.logIfEnabled(FQCN, Level.INFO, markerFactory.getLog4jMarker(marker), s, o);
}

@Override
public void info(final Marker marker, final String s, final Object o, final Object o1) {
logger.logIfEnabled(FQCN, Level.INFO, getMarker(marker), s, o, o1);
logger.logIfEnabled(FQCN, Level.INFO, markerFactory.getLog4jMarker(marker), s, o, o1);
}

@Override
public void info(final Marker marker, final String s, final Object... objects) {
logger.logIfEnabled(FQCN, Level.INFO, getMarker(marker), s, objects);
logger.logIfEnabled(FQCN, Level.INFO, markerFactory.getLog4jMarker(marker), s, objects);
}

@Override
public void info(final Marker marker, final String s, final Throwable throwable) {
logger.logIfEnabled(FQCN, Level.INFO, getMarker(marker), s, throwable);
logger.logIfEnabled(FQCN, Level.INFO, markerFactory.getLog4jMarker(marker), s, throwable);
}

@Override
Expand Down Expand Up @@ -266,32 +267,32 @@ public boolean isWarnEnabled() {

@Override
public boolean isWarnEnabled(final Marker marker) {
return logger.isEnabled(Level.WARN, getMarker(marker), null);
return logger.isEnabled(Level.WARN, markerFactory.getLog4jMarker(marker), null);
}

@Override
public void warn(final Marker marker, final String s) {
logger.logIfEnabled(FQCN, Level.WARN, getMarker(marker), s);
logger.logIfEnabled(FQCN, Level.WARN, markerFactory.getLog4jMarker(marker), s);
}

@Override
public void warn(final Marker marker, final String s, final Object o) {
logger.logIfEnabled(FQCN, Level.WARN, getMarker(marker), s, o);
logger.logIfEnabled(FQCN, Level.WARN, markerFactory.getLog4jMarker(marker), s, o);
}

@Override
public void warn(final Marker marker, final String s, final Object o, final Object o1) {
logger.logIfEnabled(FQCN, Level.WARN, getMarker(marker), s, o, o1);
logger.logIfEnabled(FQCN, Level.WARN, markerFactory.getLog4jMarker(marker), s, o, o1);
}

@Override
public void warn(final Marker marker, final String s, final Object... objects) {
logger.logIfEnabled(FQCN, Level.WARN, getMarker(marker), s, objects);
logger.logIfEnabled(FQCN, Level.WARN, markerFactory.getLog4jMarker(marker), s, objects);
}

@Override
public void warn(final Marker marker, final String s, final Throwable throwable) {
logger.logIfEnabled(FQCN, Level.WARN, getMarker(marker), s, throwable);
logger.logIfEnabled(FQCN, Level.WARN, markerFactory.getLog4jMarker(marker), s, throwable);
}

@Override
Expand Down Expand Up @@ -326,38 +327,38 @@ public boolean isErrorEnabled() {

@Override
public boolean isErrorEnabled(final Marker marker) {
return logger.isEnabled(Level.ERROR, getMarker(marker), null);
return logger.isEnabled(Level.ERROR, markerFactory.getLog4jMarker(marker), null);
}

@Override
public void error(final Marker marker, final String s) {
logger.logIfEnabled(FQCN, Level.ERROR, getMarker(marker), s);
logger.logIfEnabled(FQCN, Level.ERROR, markerFactory.getLog4jMarker(marker), s);
}

@Override
public void error(final Marker marker, final String s, final Object o) {
logger.logIfEnabled(FQCN, Level.ERROR, getMarker(marker), s, o);
logger.logIfEnabled(FQCN, Level.ERROR, markerFactory.getLog4jMarker(marker), s, o);
}

@Override
public void error(final Marker marker, final String s, final Object o, final Object o1) {
logger.logIfEnabled(FQCN, Level.ERROR, getMarker(marker), s, o, o1);
logger.logIfEnabled(FQCN, Level.ERROR, markerFactory.getLog4jMarker(marker), s, o, o1);
}

@Override
public void error(final Marker marker, final String s, final Object... objects) {
logger.logIfEnabled(FQCN, Level.ERROR, getMarker(marker), s, objects);
logger.logIfEnabled(FQCN, Level.ERROR, markerFactory.getLog4jMarker(marker), s, objects);
}

@Override
public void error(final Marker marker, final String s, final Throwable throwable) {
logger.logIfEnabled(FQCN, Level.ERROR, getMarker(marker), s, throwable);
logger.logIfEnabled(FQCN, Level.ERROR, markerFactory.getLog4jMarker(marker), s, throwable);
}

@Override
public void log(final Marker marker, final String fqcn, final int level, final String message, final Object[] params, final Throwable throwable) {
final Level log4jLevel = getLevel(level);
final org.apache.logging.log4j.Marker log4jMarker = getMarker(marker);
final org.apache.logging.log4j.Marker log4jMarker = markerFactory.getLog4jMarker(marker);

if (!logger.isEnabled(log4jLevel, log4jMarker, message, params)) {
return;
Expand All @@ -377,17 +378,6 @@ public void log(final Marker marker, final String fqcn, final int level, final S
logger.logMessage(fqcn, log4jLevel, log4jMarker, msg, actualThrowable);
}

private static org.apache.logging.log4j.Marker getMarker(final Marker marker) {
if (marker == null) {
return null;
} else if (marker instanceof Log4jMarker) {
return ((Log4jMarker) marker).getLog4jMarker();
} else {
final Log4jMarkerFactory factory = (Log4jMarkerFactory) StaticMarkerBinder.SINGLETON.getMarkerFactory();
return ((Log4jMarker) factory.getMarker(marker)).getLog4jMarker();
}
}

@Override
public String getName() {
return name;
Expand All @@ -401,6 +391,7 @@ private void readObject(final ObjectInputStream aInputStream) throws ClassNotFou
// always perform the default de-serialization first
aInputStream.defaultReadObject();
logger = LogManager.getContext().getLogger(name);
markerFactory = ((Log4jLoggerFactory) org.slf4j.LoggerFactory.getILoggerFactory()).getMarkerFactory();
}

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,14 +34,20 @@ public class Log4jLoggerFactory extends AbstractLoggerAdapter<Logger> implements

private static final StatusLogger LOGGER = StatusLogger.getLogger();
private static final String SLF4J_PACKAGE = "org.slf4j";
private static final String TO_SLF4J_CONTEXT = "org.apache.logging.slf4j.SLF4JLoggerContext";
private static final Predicate<Class<?>> CALLER_PREDICATE = clazz ->
!AbstractLoggerAdapter.class.equals(clazz) && !clazz.getName().startsWith(SLF4J_PACKAGE);
private static final String TO_SLF4J_CONTEXT = "org.apache.logging.slf4j.SLF4JLoggerContext";

private final Log4jMarkerFactory markerFactory;

public Log4jLoggerFactory(final Log4jMarkerFactory markerFactory) {
this.markerFactory = markerFactory;
}

@Override
protected Logger newLogger(final String name, final LoggerContext context) {
final String key = Logger.ROOT_LOGGER_NAME.equals(name) ? LogManager.ROOT_LOGGER_NAME : name;
return new Log4jLogger(validateContext(context).getLogger(key), name);
return new Log4jLogger(markerFactory, validateContext(context).getLogger(key), name);
}

@Override
Expand All @@ -55,6 +61,10 @@ protected LoggerContext getContext() {
: getContext(anchor);
}

Log4jMarkerFactory getMarkerFactory() {
return markerFactory;
}

private LoggerContext validateContext(final LoggerContext context) {
if (TO_SLF4J_CONTEXT.equals(context.getClass().getName())) {
throw new LoggingException("log4j-slf4j-impl cannot be present with log4j-to-slf4j");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -52,8 +52,7 @@ public Map<String, String> getCopyOfContextMap() {
}

@Override
@SuppressWarnings("unchecked") // nothing we can do about this, restricted by SLF4J API
public void setContextMap(@SuppressWarnings("rawtypes") final Map map) {
public void setContextMap(final Map<String, String> map) {
ThreadContext.clearMap();
ThreadContext.putAll(map);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,24 +24,24 @@
import org.apache.logging.log4j.MarkerManager;
import org.slf4j.IMarkerFactory;
import org.slf4j.Marker;
import org.slf4j.impl.StaticMarkerBinder;

/**
* Log4j/SLF4J {@link org.slf4j.Marker} type bridge.
* Log4j/SLF4J {@link Marker} type bridge.
*/
public class Log4jMarker implements Marker {
class Log4jMarker implements Marker {

public static final long serialVersionUID = 1590472L;

private final IMarkerFactory factory = StaticMarkerBinder.SINGLETON.getMarkerFactory();
private final IMarkerFactory factory;

private final org.apache.logging.log4j.Marker marker;

/**
* Constructs a Log4jMarker using an existing Log4j {@link org.apache.logging.log4j.Marker}.
* @param marker The Log4j Marker upon which to base this Marker.
*/
public Log4jMarker(final org.apache.logging.log4j.Marker marker) {
public Log4jMarker(final IMarkerFactory markerFactory, final org.apache.logging.log4j.Marker marker) {
this.factory = markerFactory;
this.marker = marker;
}

Expand All @@ -55,7 +55,7 @@ public void add(final Marker marker) {
}

@Override
public boolean contains(final org.slf4j.Marker marker) {
public boolean contains(final Marker marker) {
if (marker == null) {
throw new IllegalArgumentException();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@ public Marker getMarker(final String name) {
}

private Marker addMarkerIfAbsent(final String name, final org.apache.logging.log4j.Marker log4jMarker) {
final Marker marker = new Log4jMarker(log4jMarker);
final Marker marker = new Log4jMarker(this, log4jMarker);
final Marker existing = markerMap.putIfAbsent(name, marker);
return existing == null ? marker : existing;
}
Expand All @@ -78,7 +78,23 @@ public Marker getMarker(final Marker marker) {
return addMarkerIfAbsent(marker.getName(), convertMarker(marker));
}

private static org.apache.logging.log4j.Marker convertMarker(final Marker original) {
/**
* Gets the Log4j2 marker associated to this SLF4J marker or creates a new one.
*
* @param marker a SLF4J marker
* @return a Log4j2 marker
*/
org.apache.logging.log4j.Marker getLog4jMarker(final Marker marker) {
if (marker == null) {
return null;
} else if (marker instanceof Log4jMarker) {
return ((Log4jMarker) marker).getLog4jMarker();
} else {
return ((Log4jMarker) getMarker(marker)).getLog4jMarker();
}
}

static org.apache.logging.log4j.Marker convertMarker(final Marker original) {
if (original == null) {
throw new IllegalArgumentException("Marker must not be null");
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
package org.slf4j.impl;

import org.apache.logging.slf4j.Log4jLoggerFactory;
import org.apache.logging.slf4j.Log4jMarkerFactory;
import org.slf4j.ILoggerFactory;
import org.slf4j.spi.LoggerFactoryBinder;

Expand Down Expand Up @@ -50,7 +51,7 @@ public final class StaticLoggerBinder implements LoggerFactoryBinder {
* Private constructor to prevent instantiation
*/
private StaticLoggerBinder() {
loggerFactory = new Log4jLoggerFactory();
loggerFactory = new Log4jLoggerFactory((Log4jMarkerFactory) StaticMarkerBinder.getSingleton().getMarkerFactory());
}

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,8 @@ public final class StaticMDCBinder {
*/
public static final StaticMDCBinder SINGLETON = new StaticMDCBinder();

private final MDCAdapter mdcAdapter = new Log4jMDCAdapter();

private StaticMDCBinder() {
}

Expand All @@ -46,7 +48,7 @@ public static StaticMDCBinder getSingleton() {
* @return an MDC adapter
*/
public MDCAdapter getMDCA() {
return new Log4jMDCAdapter();
return mdcAdapter;
}

/**
Expand Down
Loading