【发布时间】:2019-05-04 12:51:20
【问题描述】:
我一直使用 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 之后,我发现在发出请求之前只需要 6s 就可以得到响应,但现在至少需要 12s 才能得到响应,所以日志配置肯定有问题,任何人都有有这方面的经验吗?
【问题讨论】:
-
这里的一般建议是使用分析器。在您的情况下,您可能希望编译一次模式并将它们存储为字段。
-
@talex 嗨,不确定剂量分析仪是什么意思?
标签: java performance logback