Как динамически настроить каталог журнала (каждый запрос) в java для ведения журнала с помощью helidon

#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?