Я использовал logback в качестве каркаса журнала, и теперь у меня есть требование, чтобы мне нужно было замаскировать некоторые конфиденциальные данные в журналах.поэтому я написал кодировщик так:
public class MaskLayot extends PatternLayout {
private String patternsProperty;
public String getPatternsProperty() {
return patternsProperty;
}
public void setPatternsProperty(String patternsProperty) {
this.patternsProperty = patternsProperty;
}
@Override
public String doLayout(ILoggingEvent event){
String message = super.doLayout(event);
if(patternsProperty != null){
String[] patterns = patternsProperty.split("|");
for(int i = 0;i<patterns.length;i++){
Pattern pattern = Pattern.compile(patterns[i]);
Matcher matcher = pattern.matcher(message);
while(matcher.find()){
message = matcher.replaceAll("$1$2****$4$5");
}
}
}
return message;
}
}
Затем я написал один файловый аппендер и один консольный аппендир: файловый аппендер:
<?xml version="1.0" encoding="UTF-8"?>
<included>
<appender name="file" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>
${logPath}/${logFile}.log
</file>
<rollingPolicy class = "ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>
${logPath}/${logFile}-%d.log.gz
</fileNamePattern>
<maxHistory>30</maxHistory>
</rollingPolicy>
<encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
<layout class="com.idolice.controller.MaskLayot">
<patternProperty>
(.*)(<dateOfBirth>)(.*?)(</dateOfBirth>)(.*) | ...etc(many similar patterns)
</patternProperty>
<pattern>
${fileLogPattern}
</pattern>
</layout>
</encoder>
</appender>
<appender name="ASYNC" class="ch.qos.logback.classic.AsyncAppender">
<queueSize>500</queueSize>
<discardingThreshold>0</discardingThreshold>
<appender-ref ref="file"/>
</appender>
</included>
и консольный аппендер:
<?xml version="1.0" encoding="UTF-8"?>
<included>
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
<layout class="com.idolice.controller.MaskLayot">
<patternProperty>
(.*)(<dateOfBirth>)(.*?)(</dateOfBirth>)(.*) | ...etc(many similar patterns)
</patternProperty>
<pattern>
${consoleLogPattern}
</pattern>
</layout>
</encoder>
</appender>
</included>
и, наконец, мой файл конфигурации logback выглядит следующим образом:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<include resource="default.xml"/>
<include resource="fileAppender.xml"/>
<include resource="consoleAppender.xml"/>
<logger name="com.idolice" level="'INFO"/>
<logger name="com.idolice" level="'DEBUG"/>
<root level="info">
<appender-ref ref="ASYNC"/>
<appender-ref ref="CONSOLE"/>
</root>
</configuration>
после того, как я начал использовать MaskLayout, я обнаружил, что до поступления запроса потребовалось всего 6 секунд, чтобы получить ответ, но теперь он будетчтобы получить ответ, потребуется не менее 12 секунд, поэтому в конфигурации журнала должно быть что-то не так, у кого-нибудь есть опыт?