#java #java.util.logging #helidon
Вопрос:
Я хочу настроить отдельный каталог журналов для каждого запроса. Возможно ли это с помощью хелидона?
Ответ №1:
Примеры oracle helidon JUL находятся на github. Основываясь на этих примерах, вам придется создать пользовательский обработчик для чтения запроса из HelidonMdc:
import io.helidon.logging.jul;
import io.helidon.logging.common;
import java.util.logging.*;
public class RequestFileHandler extends Handler {
public RequestFileHandler() {
super.setFormatter(new HelidonFormatter());
}
@Override
public synchronized void publish(LogRecord r) {
if (isLoggable(r)) {
try {
FileHandler h = new FileHandler(fileName(r), Integer.MAX_VALUE, 1, true);
try {
h.setLevel(getLevel());
h.setEncoding(getEncoding());
h.setFilter(null);
h.setFormatter(getFormatter());
h.setErrorManager(getErrorManager());
h.publish(r);
} finally {
h.close();
}
} catch (IOException | SecurityException jm) {
this.reportError(null, jm, ErrorManager.WRITE_FAILURE);
}
}
}
@Override
public void flush() {
}
@Override
public void close() {
super.setLevel(Level.OFF);
}
private String fileName(LogRecord r) {
Optional<String> o = HelidonMdc.get("name");
return o.isPresent() ? o.get() ".log" : "unknown.log";
}}
Как и в примере кода, этот код предполагает, что вы установили значение » имя » для идентификатора запроса. Затем вам придется установить этот обработчик в свой регистратор приложений.
Комментарии:
1. Я считаю, что это применимо к java11. Можем ли мы что-нибудь сделать с 8?
2. @bhargavibharu Какой провал вы видите на Java8?