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

时间:2019-08-29 16:03:37

标签: quarkus

我们有一个自定义的JUL Formatter,它主要创建一个JSON,其中包括MDC的属性,以将其发送到我们的K8S集群上的ELK。 我还没有找到一种方法来告诉Quarkus将自定义格式化程序“ com.example.CustomJulJsonFormatter”用于所有日志记录目的。 带有所有日志选项的application.properties文件不包括格式化程序(类)的选项。还是我在这里想念东西?

我通过编程成功地(通过处理程序)将Formatter设置为自定义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.properties”进行设置 在ENTRYPOINT中。在这里也最容易做到这一点,但是我也找不到合适的jvm选项来实现quarkus启动(尤其是本机版本)。

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

编辑:自定义格式化程序类的大致轮廓是

...
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();
    }
    ...
}

1 个答案:

答案 0 :(得分:0)

现在Quarku可以使用JSON记录器解决了类似问题。到目前为止(Quarkus v1.5.2),扩展名quarkus-logging-json提供了类似于我们自定义JUL格式化程序使用的JSON格式的日志,并且一切正常。 MDC处理也不再需要(无论如何在本机中也不能很好地工作),因为在这种情况下,其主要用例已被quarkus-smallrye-opentracing的使用所覆盖。