我们有一个自定义的 JUL Formatter,它主要创建一个包含 MDC 属性的 JSON,以便将其发送到我们 K8S 集群上的 ELK。我还没有找到一种方法来告诉 Quarkus 将自定义格式器“com.example.CustomJulJsonFormatter”用于所有日志记录目的。具有所有日志选项的 application.properties 文件不包括格式化程序(类)的选项。还是我在这里遗漏了什么?
我以编程方式成功地将格式化程序(通过处理程序)设置为自定义格式化程序,但这至少会错过启动日志消息,而且似乎不鼓励这样做:
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,并通过 ENTRYPOINT 中的“--logProperties”、“/opt/payara/logging.properties”进行设置。在这里也最容易做到这一点,但我也找不到合适的 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();
}
...
}
Quarkus 现在可用的 JSON 记录器似乎已经解决了这个问题。截至目前(Quarkus v1.5.2),该扩展quarkus-logging-json
提供类似于我们与自定义 JUL 格式化程序一起使用的那些 JSON 格式的日志,并且一切都按预期工作。也不再需要 MDC 处理(无论如何在本机中都不能很好地工作),因为它在此上下文中的主要用例已通过使用quarkus-smallrye-opentracing
.
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句