Использование Java 8.
У меня есть класс Logger, который вызывает API всякий раз, когда ему нужно что-то записать. Я понял, что если API-то плохо настроен или API просто не отвечает, мои действия в журнале занимают уйму времени.
Пример синхронного ведения журнала:
public void debug(String message) {
MDC.clear();
MDC.put(SOME_KEY, "SOME_VALUE");
super.debug(message);
MDC.clear();
}
Мне удалось точно определить, что проблема здесь, потому что, если я просто прокомментирую все и перестану регистрировать или делать что-либо, все будет работать так же быстро, как и должно:
public void debug(String message) {
// MDC.clear();
// MDC.put(SOME_KEY, "SOME_VALUE");
// super.debug(message);
// MDC.clear();
}
Так что я подумал сделать этот асинхронный вызов, так как мне все равно, будет ли он синхронно регистрироваться:
public void debug(String message) {
CompletableFuture.runAsync(() -> {
MDC.clear();
MDC.put(SOME_KEY, "SOME_VALUE");
super.debug(message);
MDC.clear();
});
}
Но этот асинхронный вызов так же плох с точки зрения производительности для моего основного приложения, как и синхронный вызов. Чего мне не хватает?