mirror of
https://github.com/valitydev/elon.git
synced 2024-11-06 09:55:20 +00:00
added custom provider for masking message in FileAppender (#4)
This commit is contained in:
parent
4a91277b41
commit
f4d6292e4e
16
logback.xml
16
logback.xml
@ -1,16 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<configuration>
|
|
||||||
<appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
|
|
||||||
<encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
|
|
||||||
<layout class="com.rbkmoney.logback.mask.PatternMaskingLayout">
|
|
||||||
<maskPattern>\b\d{6}(\d{2,9})\d{4}\b</maskPattern>
|
|
||||||
<maskPattern>(\b\d{3}\b)</maskPattern>
|
|
||||||
<pattern>%-5p [%d{ISO8601,UTC}] [%thread] %c: %m%n%rootException</pattern>
|
|
||||||
</layout>
|
|
||||||
</encoder>
|
|
||||||
</appender>
|
|
||||||
<root level="debug">
|
|
||||||
<appender-ref ref="stdout"/>
|
|
||||||
</root>
|
|
||||||
</configuration>
|
|
||||||
|
|
11
pom.xml
11
pom.xml
@ -29,6 +29,17 @@
|
|||||||
<version>1.2.3</version>
|
<version>1.2.3</version>
|
||||||
<scope>compile</scope>
|
<scope>compile</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>net.logstash.logback</groupId>
|
||||||
|
<artifactId>logstash-logback-encoder</artifactId>
|
||||||
|
<version>5.3</version>
|
||||||
|
<scope>compile</scope>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.rbkmoney.logback</groupId>
|
||||||
|
<artifactId>nop-rolling</artifactId>
|
||||||
|
<version>1.0.0</version>
|
||||||
|
</dependency>
|
||||||
<!-- Test libs -->
|
<!-- Test libs -->
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>junit</groupId>
|
<groupId>junit</groupId>
|
||||||
|
@ -0,0 +1,25 @@
|
|||||||
|
package com.rbkmoney.logback.mask;
|
||||||
|
|
||||||
|
import java.util.regex.Matcher;
|
||||||
|
import java.util.regex.Pattern;
|
||||||
|
import java.util.stream.IntStream;
|
||||||
|
|
||||||
|
public class MaskingMessageWithPattern {
|
||||||
|
|
||||||
|
public static String maskMessage(String message, Pattern multilinePattern) {
|
||||||
|
if (multilinePattern == null) {
|
||||||
|
return message;
|
||||||
|
}
|
||||||
|
StringBuilder sb = new StringBuilder(message);
|
||||||
|
Matcher matcher = multilinePattern.matcher(sb);
|
||||||
|
while (matcher.find()) {
|
||||||
|
IntStream.rangeClosed(1, matcher.groupCount()).forEach(group -> {
|
||||||
|
if ((matcher.group(group) != null)) {
|
||||||
|
IntStream.range(matcher.start(group), matcher.end(group))
|
||||||
|
.forEach(i -> sb.setCharAt(i, '*'));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
return sb.toString();
|
||||||
|
}
|
||||||
|
}
|
@ -5,9 +5,8 @@ import ch.qos.logback.classic.spi.ILoggingEvent;
|
|||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.regex.Matcher;
|
|
||||||
import java.util.regex.Pattern;
|
import java.util.regex.Pattern;
|
||||||
import java.util.stream.IntStream;
|
|
||||||
|
|
||||||
public class PatternMaskingLayout extends PatternLayout{
|
public class PatternMaskingLayout extends PatternLayout{
|
||||||
|
|
||||||
@ -24,23 +23,6 @@ public class PatternMaskingLayout extends PatternLayout{
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String doLayout(ILoggingEvent event) {
|
public String doLayout(ILoggingEvent event) {
|
||||||
return super.doLayout(new MaskedEvent(event, maskMessage(event.getFormattedMessage())));
|
return super.doLayout(new MaskedEvent(event, MaskingMessageWithPattern.maskMessage(event.getFormattedMessage(), multilinePattern)));
|
||||||
}
|
|
||||||
|
|
||||||
private String maskMessage(String message) {
|
|
||||||
if (multilinePattern == null) {
|
|
||||||
return message;
|
|
||||||
}
|
|
||||||
StringBuilder sb = new StringBuilder(message);
|
|
||||||
Matcher matcher = multilinePattern.matcher(sb);
|
|
||||||
while (matcher.find()) {
|
|
||||||
IntStream.rangeClosed(1, matcher.groupCount()).forEach(group -> {
|
|
||||||
if ((matcher.group(group) != null)) {
|
|
||||||
IntStream.range(matcher.start(group), matcher.end(group))
|
|
||||||
.forEach(i -> sb.setCharAt(i, '*'));
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
return sb.toString();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -0,0 +1,43 @@
|
|||||||
|
package com.rbkmoney.logback.mask;
|
||||||
|
|
||||||
|
import ch.qos.logback.classic.spi.ILoggingEvent;
|
||||||
|
import com.fasterxml.jackson.core.JsonGenerator;
|
||||||
|
import net.logstash.logback.composite.AbstractFieldJsonProvider;
|
||||||
|
import net.logstash.logback.composite.FieldNamesAware;
|
||||||
|
import net.logstash.logback.composite.JsonWritingUtils;
|
||||||
|
import net.logstash.logback.fieldnames.LogstashFieldNames;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.regex.Pattern;
|
||||||
|
|
||||||
|
public class PatternMaskingMessageJsonProvider extends AbstractFieldJsonProvider<ILoggingEvent> implements FieldNamesAware<LogstashFieldNames> {
|
||||||
|
private Pattern multilinePattern;
|
||||||
|
private List<String> maskPatterns = new ArrayList<>();
|
||||||
|
public static final String FIELD_MESSAGE = "message";
|
||||||
|
|
||||||
|
public void addMaskPattern(String maskPattern) {
|
||||||
|
maskPatterns.add(maskPattern);
|
||||||
|
multilinePattern = Pattern.compile(
|
||||||
|
String.join("|", maskPatterns),
|
||||||
|
Pattern.MULTILINE
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
public PatternMaskingMessageJsonProvider() {
|
||||||
|
setFieldName(FIELD_MESSAGE);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void writeTo(JsonGenerator generator, ILoggingEvent event) throws IOException {
|
||||||
|
JsonWritingUtils.writeStringField(generator, getFieldName(), MaskingMessageWithPattern.maskMessage(event.getFormattedMessage(),multilinePattern));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setFieldNames(LogstashFieldNames fieldNames) {
|
||||||
|
setFieldName(fieldNames.getMessage());
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
56
src/main/resources/logback.xml
Normal file
56
src/main/resources/logback.xml
Normal file
@ -0,0 +1,56 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<configuration>
|
||||||
|
|
||||||
|
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
|
||||||
|
<file>${LOG_FILE}</file>
|
||||||
|
<rollingPolicy class="com.rbkmoney.log.appender.NoopRollingPolicy"/>
|
||||||
|
<triggeringPolicy class="com.rbkmoney.log.appender.RotationBasedTriggeringPolicy">
|
||||||
|
<checkCachePeriod>5000</checkCachePeriod>
|
||||||
|
</triggeringPolicy>
|
||||||
|
<encoder class="net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder">
|
||||||
|
<providers>
|
||||||
|
<mdc/>
|
||||||
|
<threadName/>
|
||||||
|
<provider class="com.rbkmoney.logback.mask.PatternMaskingMessageJsonProvider">
|
||||||
|
<maskPattern>\b\d{6}(\d{2,9})\d{4}\b</maskPattern>
|
||||||
|
<maskPattern>(\b\d{3}\b)</maskPattern>
|
||||||
|
</provider>
|
||||||
|
<version/>
|
||||||
|
<loggerName/>
|
||||||
|
<context/>
|
||||||
|
<pattern>
|
||||||
|
<pattern>
|
||||||
|
{
|
||||||
|
"@timestamp": "%date{yyy-MM-dd'T'HH:mm:ss.SSSXXX, UTC}",
|
||||||
|
"@severity": "%level",
|
||||||
|
"application": "@artifactId@",
|
||||||
|
"application_version": "@version@"
|
||||||
|
}
|
||||||
|
</pattern>
|
||||||
|
</pattern>
|
||||||
|
<stackTrace>
|
||||||
|
<throwableConverter class="net.logstash.logback.stacktrace.ShortenedThrowableConverter">
|
||||||
|
<shortenedClassNameLength>20</shortenedClassNameLength>
|
||||||
|
<rootCauseFirst>true</rootCauseFirst>
|
||||||
|
</throwableConverter>
|
||||||
|
</stackTrace>
|
||||||
|
</providers>
|
||||||
|
</encoder>
|
||||||
|
</appender>
|
||||||
|
|
||||||
|
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
|
||||||
|
<encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
|
||||||
|
<layout class="com.rbkmoney.logback.mask.PatternMaskingLayout">
|
||||||
|
<maskPattern>\b\d{6}(\d{2,9})\d{4}\b</maskPattern>
|
||||||
|
<maskPattern>(\b\d{3}\b)</maskPattern>
|
||||||
|
<pattern>%-5p [%d{ISO8601,UTC}] [%thread] %c: %m%n%rootException</pattern>
|
||||||
|
</layout>
|
||||||
|
</encoder>
|
||||||
|
</appender>
|
||||||
|
|
||||||
|
<root level="ALL">
|
||||||
|
<appender-ref ref="CONSOLE"/>
|
||||||
|
<appender-ref ref="FILE"/>
|
||||||
|
</root>
|
||||||
|
</configuration>
|
||||||
|
|
@ -128,4 +128,5 @@ public class PatternMaskingLayoutTest {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user