如何在带有 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
.
的使用所涵盖
我们有一个自定义的 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
.