如何在带有 Quarkus 的 JUL (java.util.logging) 中使用自定义格式化程序

How to use a custom Formatter in JUL (java.util.logging) with Quarkus

我们有一个自定义的 JUL 格式化程序,它主要创建一个 JSON,包括 MDC 的属性,以便将其发送到我们 K8S 集群上的 ELK。 我还没有找到一种方法来告诉 Quarkus 使用自定义 Formatter "com.example.CustomJulJsonFormatter" 来进行所有日志记录。 包含所有日志选项的 application.properties 文件不包含格式化程序选项 (class)。或者我在这里遗漏了什么?

我成功地将 Formatter(通过 Handler)以编程方式设置为自定义 Formatter,但这至少遗漏了启动日志消息,而且似乎不鼓励这样做:

LogManager.getLogManager().getLogger(Logger.GLOBAL_LOGGER_NAME).setUseParentHandlers(false);
Handler handler = new ConsoleHandler();
handler.setFormatter(new CustomJulJsonFormatter());
LogManager.getLogManager().getLogger(Logger.GLOBAL_LOGGER_NAME).addHandler(handler);

目前我对 Quarkus 还是很陌生,来自 payara micro,我们在 docker 容器中运送自定义 logging.properties 并通过“--logProperties”、“/opt/payara/logging.属性” 在入口点。在这里执行此操作也是最简单的,但我也找不到合适的 jvm 选项来使用 quarkus 启动(尤其是本机版本)来完成此操作。

让我知道这是否有意义。任何帮助将不胜感激:)

编辑:自定义格式化程序的粗略概述 class 是

...
import java.util.logging.Formatter;
import java.util.logging.LogRecord;
import org.slf4j.MDC;
import com.fasterxml.jackson.databind.ObjectMapper;
...
public class CustomJulJsonFormatter extends Formatter {
    ...
    @Override
    public String format(LogRecord record) {
    // create JSON from LogRecord, MDC and Environment
    ...
    return jsonLog.toString();
    }
    ...
}

似乎这个问题已经被 Quarkus 现在可用的 JSON 记录器解决了。截至目前(Quarkus v1.5.2),扩展 quarkus-logging-json 提供 JSON 格式的日志,类似于我们与自定义 JUL 格式化程序一起使用的日志,一切都按预期工作。 MDC 处理也不再是必需的(无论如何在本机中工作得不是很好),因为它在这种情况下的主要用例被 quarkus-smallrye-opentracing.

的使用所涵盖