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