Я не могу перехватить сообщение журнала до того, как оно будет отформатировано. Потому что я должен маскировать аргументы перед форматированием.
Любая помощь будет полезна?
Я уже пробовал с 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;
}
у нас есть какое-нибудь зелье, чтобы перехватить сообщение, прежде чем оно будет отформатировано?