Я хочу замаскировать значения System.out.println (CARD_NUMBER) в catalina.out
Я выполнил следующее кодирование ниже, и он работает нормально для ведения журнала, например, Log.info (CARD_NO) получаетмаскируется как XXXX, но тот же CARD_NO не маскируется, если он записан как System.out.println (CARD_NUMBER), вместо этого CARD_NO печатается в catalina.out
В некотором классе Test, например
Log.info (CARD_NO) ---> XXXX (замаскированная карточка №)
System.out.println (CARD_NO) ---> CARD_NO напечатано (без замаскированной карты нет)
В Log4j.xml
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
<appender name="console" class="org.apache.log4j.ConsoleAppender">
<param name="Target" value="System.out" />
<layout class="com.test.soap.common.CustomFilteringLayout">
<param name="ConversionPattern" value="%d{ISO8601} %-5p %c{1}.%M() %m%n" />
</layout>
</appender>
<appender name="logfile" class="org.apache.log4j.DailyRollingFileAppender">
<param name="File" value="../logs/test.log" />
<layout class="com.test.soap.common.CustomFilteringLayout">
<param name="ConversionPattern" value="%d{ISO8601}{CST} %p %t [%c] - %m%n" />
</layout>
</appender>
<root>
<priority value="INFO" />
<appender-ref ref="logfile" />
<appender-ref ref="console" />
</root>
</log4j:configuration>
CustomFilteringLayout class
public class CustomFilteringLayout extends EnhancedPatternLayout {
/**
* Any number that's of 10 digit would be masked (e.g: cardId). If number is > 11 digit then first 12 digit would masked.
* This is so because of keeping it in mind that cardNumber's length is 16 digit so first 12 digit would be masked.
*
* @param LoggingEvent event
* @return String formated String
*/
@Override
public String format(LoggingEvent event) {
if (event.getMessage() instanceof String) {
String message = event.getRenderedMessage();
Matcher matcher = RemoteConstants.PATTERN.matcher(message);
if (matcher.find()) {
String maskedMessage ="";
if(StringUtils.isNotBlank(matcher.group(1))&& matcher.group(1).length()==RemoteConstants.CARD_NUMBER_LENGTH){
StringBuffer masked = new StringBuffer();
masked.append(matcher.group(1).substring(0, 4)).append(" ");
masked.append(matcher.group(1).substring(4, 6)).append("XX ");
masked.append("XXXX ").append(matcher.group(1).substring(12, 16));
maskedMessage=masked.toString();
}else{
maskedMessage = matcher.replaceAll(RemoteConstants.MASK);
}
Throwable throwable = event.getThrowableInformation() != null ? event.getThrowableInformation()
.getThrowable() : null;
LoggingEvent maskedEvent = new LoggingEvent(event.fqnOfCategoryClass, Logger.getLogger(event
.getLoggerName()), event.timeStamp, event.getLevel(), maskedMessage, throwable);
return super.format(maskedEvent);
}
}
return super.format(event);
}
}