1

ログログが書き込まれる前に機密データをマスクする log4j から呼び出されるカスタム jar を作成しました。クラスは期待どおりに機能しますが、私の ajp スレッドは 5 倍になりました。log4j では、 -layout class="org.apache.log4j.PatternLayout" を次のように変更しました: -layout class="com.custom.protectdata.DataFilteringLayout"

以下はメインクラスです。質問は、ある種のオブジェクトのクリーンアップを行い、非同期に設定する必要があります。スレッドを増加させないこのコードを改善するにはどうすればよいですか? これは、DEBUG ロギングと大量のトラフィックに設定された jboss サーバーで実行されています。テスト ボックスではスレッドが大幅に増加していることに気付きませんでしたが、トラフィックの多い実稼働ボックスではスレッドが 5 倍に増加しました

DataFilteringLayout.java

public class 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