我已经编写了一个从 log4j 调用的自定义 jar,它将在写入日志日志之前屏蔽敏感数据。该课程按预期工作,但现在我的 ajp 线程增加了 5 倍。在 log4j 我刚刚更改: -layout class="org.apache.log4j.PatternLayout" 为: -layout class="com.custom.protectdata.DataFilteringLayout"
下面是主类,问题是我是否应该进行某种对象清理,设置异步,如何改进不会增加线程的代码?这是在调试日志和大流量设置的 jboss 服务器上运行的。我没有注意到我的测试机器上的线程有很大的增加,但是在高流量的生产机器上,线程增加了 5 倍
数据过滤布局.java
公共类 DataFilteringLayout 扩展 PatternLayout {
@Override
public String format(LoggingEvent event)
{
if (event.getMessage() instanceof String) {
String maskedMessage = event.getRenderedMessage();
boolean changedMessage = false;
// IDENTIFY SENSITIVE DATA FROM PROPERTY FILE KEYS
GetProtectedDataProp protectData = new GetProtectedDataProp();
Set<Object> keys = protectData.getAllKeys();
for (Object k : keys) {
String key = (String) k;
// RETRIEVE REGEX PATTERN FROM PROPERTY FILE
Pattern pkey = Pattern.compile(protectData.getPropertyValue(key),Pattern.CASE_INSENSITIVE|Pattern.UNICODE_CASE);
// CHECK PATTERN AGAINST INCOMING MESSAGE
Matcher matchPattern = pkey.matcher(maskedMessage);
// IF PATTERN FOUND MODIFY MESSAGE WITH MASKED FORMAT
if (matchPattern.find()) {
// IDENTIFY OUTPUT FORMAT OF MASKED DATA
GetMaskedFormatProp maskFormat = new GetMaskedFormatProp();
// APPLY REGEX PATTERN AGAINST RECEIVED MESSAGE
maskedMessage = matchPattern.replaceAll(maskFormat.getPropertyValue(key));
changedMessage = true;
}
}
if (changedMessage){
String maskedEvent = logMaskedData(maskedMessage, event);
return maskedEvent;
}
}
return super.format(event);
}
// CREATE A NEW LOGGING EVENT WITH THE MODIFIED (masked) STRING
public String logMaskedData(String maskedMessage, LoggingEvent event)
{
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);
}
在此先感谢您的任何建议!