[
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)