我想为每个请求配置单独的日志目录。这可能与 helidon 吗?
问问题
63 次
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 回答