Перехватите сообщение журнала и аргументы прежде, чем оно будет отформатировано Logback Java - PullRequest
0 голосов
/ 04 июля 2019

Я не могу перехватить сообщение журнала до того, как оно будет отформатировано. Потому что я должен маскировать аргументы перед форматированием.

Любая помощь будет полезна?

Я уже пробовал с LayoutWrappingEncoder и layout , но сообщение форматируется уже в LoggingEvent объект.

Попытка с обратным входом. Фильтр также здесь, также как и ранее, как уже отформатированное сообщение.

Событие ILoggingEvent объект содержит форматированное сообщение.

@Override
public String doLayout(ILoggingEvent event) {
       return super.doLayout(maskSensitiveLogs(event));
}

private ILoggingEvent maskSensitiveLogs(ILoggingEvent event) {
        LoggingEvent loggingEvent = (LoggingEvent) event;
        Object[] obj = loggingEvent.getArgumentArray();
        if (maskMap.isEmpty() || ArrayUtils.isEmpty(obj)) {
                return event;
        }
        maskMap.forEach((k, v) -> {
                for (int i = 0; i < obj.length; i++) {
                    Matcher matcher = k.matcher(new 
             StringBuilder(obj[i].toString()));
                    while (matcher.find()) {
                        obj[i] = StringUtils.overlay(obj[i].toString(), 
        v.getOverlay(), v.getStartIndex(), v.getEndIndex() + 1);
                    }
                }
       });
       return event;
}

у нас есть какое-нибудь зелье, чтобы перехватить сообщение, прежде чем оно будет отформатировано?

...