1

我已经编写了一个从 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);
}

在此先感谢您的任何建议!

4

0 回答 0