[ 
https://issues.apache.org/jira/browse/LOG4J2-3097?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Matt Sicker resolved LOG4J2-3097.
---------------------------------
    Fix Version/s: 3.0.0
         Assignee: Ralph Goers
       Resolution: Fixed

This was fixed incidentally as part of 
https://issues.apache.org/jira/browse/LOG4J2-2639 due to the flattening of the 
{{MessageFactory}} interface.

> log4j-slf4j-impl not use MessageFactory2 
> -----------------------------------------
>
>                 Key: LOG4J2-3097
>                 URL: https://issues.apache.org/jira/browse/LOG4J2-3097
>             Project: Log4j 2
>          Issue Type: Bug
>          Components: SLF4J Bridge
>    Affects Versions: 2.14.1
>         Environment: JDK 1.8.0.192
> slf4j-api 1.7.30 ,
> log4j-slf4j-impl 2.14.1,
> log4j-api 2.14.1
> log4j-core 2.14.1.
>            Reporter: lizongbo
>            Assignee: Ralph Goers
>            Priority: Major
>              Labels: features
>             Fix For: 3.0.0
>
>
> Hi,
> I'm using slf4j-api 1.7.30 ,log4j-slf4j-impl 2.14.1,log4j-api 2.14.1 and 
> log4j-core 2.14.1.
> Then I config log4j2.component.properties with:
> log4j2.messageFactory=com.lizongbo.log4j2.DataMaskingMessageFactory
>  
> code:
> public class DataMaskingMessageFactory extends AbstractMessageFactory {
>  private static final long serialVersionUID = 1L;
> @Override
>  public Message newMessage(Object message) {
>  return new DataMaskingParameterizedMessage("{}", message);
>  }
> @Override
>  public Message newMessage(String message) {
>  return new DataMaskingParameterizedMessage(message);
>  }
> @Override
>  public Message newMessage(String message, Object... params) {
>  return new DataMaskingParameterizedMessage(message, params);
>  }
> }
> So I can do datamask for every log content.
>  
>  
> ButI found Mybatis log content not datamasked.
> org.apache.logging.slf4j.Log4jLogger  log method code:
>  
> @Override
>  public void log(final Marker marker, final String fqcn, final int level, 
> final String message, final Object[] params, Throwable throwable) {
>  final Level log4jLevel = getLevel(level);
>  final org.apache.logging.log4j.Marker log4jMarker = getMarker(marker);
> if (!logger.isEnabled(log4jLevel, log4jMarker, message, params)) {
>  return;
>  }
>  final Message msg;
>  if (CONVERTER != null && eventLogger && marker != null && 
> marker.contains(EVENT_MARKER)) {
>  msg = CONVERTER.convertEvent(message, params, throwable);
>  } else if (params == null) {
>  msg = new SimpleMessage(message); // bug: not use messageFactory.newMessage
>  } else {
>  msg = new ParameterizedMessage(message, params, throwable); // bug: not use 
> messageFactory.newMessage
>  if (throwable != null) {
>  throwable = msg.getThrowable();
>  }
>  }
>  logger.logMessage(fqcn, log4jLevel, log4jMarker, msg, throwable);
>  }
>  
> and org.apache.logging.log4j.spi.AbstractLogger code:
> protected void logMessage(final String fqcn, final Level level, final Marker 
> marker, final String message,
>  final Object... params) {
>  final Message msg = messageFactory.newMessage(message, params);//use 
> messageFactory.newMessage
>  logMessageSafely(fqcn, level, marker, msg, msg.getThrowable());
>  }
>  
> So  org.apache.logging.slf4j.Log4jLogger log method also need   use 
> messageFactory.newMessage to create  Message object.
>  
> just like this:
>  
> -----------------------------------
>  private final MessageFactory2 messageFactory;
>  
>  public Log4jLogger(final ExtendedLogger logger, final String name) {
>  this.logger = logger;
>  this.eventLogger = "EventLogger".equals(name);
>  this.name = name;
>  this.messageFactory = createDefaultMessageFactory();
>  }
>  private static MessageFactory2 createDefaultMessageFactory() {
>  try {
>  final MessageFactory result = 
> org.apache.logging.log4j.spi.AbstractLogger.DEFAULT_MESSAGE_FACTORY_CLASS.newInstance();
>  return narrow(result);
>  } catch (final InstantiationException | IllegalAccessException e) {
>  throw new IllegalStateException(e);
>  }
>  }
>  
>  @Override
>  public void log(final Marker marker, final String fqcn, final int level, 
> final String message, final Object[] params, Throwable throwable) {
>  final Level log4jLevel = getLevel(level);
>  final org.apache.logging.log4j.Marker log4jMarker = getMarker(marker);
> if (!logger.isEnabled(log4jLevel, log4jMarker, message, params)) {
>  return;
>  }
>  final Message msg;
>  if (CONVERTER != null && eventLogger && marker != null && 
> marker.contains(EVENT_MARKER)) {
>  msg = CONVERTER.convertEvent(message, params, throwable);
>  } else if (params == null) {
>  //msg = new SimpleMessage(message); 
>  msg = messageFactory.newMessage(message, p0, p1, p2, p3, p4, p5, p6, p7, p8, 
> p9);
>  } else {
>  //msg = new ParameterizedMessage(message, params, throwable); 
>  msg = messageFactory.newMessage(message, params);
>  if (throwable != null) {
>  throwable = msg.getThrowable();
>  }
>  }
>  logger.logMessage(fqcn, log4jLevel, log4jMarker, msg, throwable);
>  }
>  
>  
>  -----------------------------------
>  
>  
>  
>  
>  
> log4j2.component.properties



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to