0

我想为每个请求配置单独的日志目录。这可能与 helidon 吗?

4

1 回答 1

0

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";
}}

与示例代码一样,此代码假设您已将“名称”的值设置为请求 ID。然后,您必须在应用程序记录器上安装此处理程序。

于 2021-08-18T22:59:29.803 回答