Quarkus 3.2.4中Java XML Digital Signature API无DEBUG日志求助
问题分析与解决方案
你遇到的核心问题是Quarkus中JDK内部的XML数字签名相关JUL日志无法输出,原因主要涉及JDK内部API访问限制、JUL到JBoss Log Manager的桥接配置以及Quarkus日志过滤规则这几个方面,以下是具体的排查和解决步骤:
1. 解除Java 17对JDK内部API的访问限制
Java 17默认严格限制对com.sun.、org.jcp.这类内部API的访问,而你要捕获日志的类正好属于这类内部API,首先需要在启动时添加参数允许访问:
在application.properties中添加:
quarkus.jvm.args=--add-opens=java.base/com.sun.org.apache.xml.internal.security=ALL-UNNAMED --add-opens=java.base/org.jcp.xml.dsig.internal=ALL-UNNAMED
2. 调整Quarkus日志配置,确保JUL日志被桥接输出
Quarkus的日志配置虽然默认桥接JUL,但针对JDK内部类的日志可能被默认过滤,需要显式禁用过滤器并匹配正确的级别映射:
修改application.properties中的日志配置:
quarkus.log.level=DEBUG quarkus.log.min-level=TRACE # 配置目标日志类别,禁用过滤器并设置对应级别(JUL的FINER对应Quarkus的DEBUG) quarkus.log.category."org.jcp.xml.dsig.internal".level=DEBUG quarkus.log.category."org.jcp.xml.dsig.internal".filter=null quarkus.log.category."com.sun.org.apache.xml.internal.security".level=DEBUG quarkus.log.category."com.sun.org.apache.xml.internal.security".filter=null
注:JUL的
FINER级别对应Quarkus(JBoss Log Manager)的DEBUG级别,FINEST对应TRACE,因此不需要设置到TRACE,用DEBUG即可匹配Oracle文档要求的FINER。
3. 备用方案:直接使用JUL原生配置文件
如果上述配置仍不生效,可以直接创建JUL的配置文件src/main/resources/logging.properties:
# 配置目标日志级别 org.jcp.xml.dsig.internal.level = FINER com.sun.org.apache.xml.internal.security.level = FINER # 配置控制台处理器 java.util.logging.ConsoleHandler.level = ALL java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter .handlers = java.util.logging.ConsoleHandler
然后在application.properties中指定使用该配置(注意和之前的--add-opens参数合并):
quarkus.jvm.args=--add-opens=java.base/com.sun.org.apache.xml.internal.security=ALL-UNNAMED --add-opens=java.base/org.jcp.xml.dsig.internal=ALL-UNNAMED -Djava.util.logging.config.file=src/main/resources/logging.properties
验证
启动Quarkus应用后执行XML签名相关逻辑,即可看到org.jcp.xml.dsig.internal和com.sun.org.apache.xml.internal.security的调试日志。
内容的提问来源于stack exchange,提问作者xperjon
相关产品推荐
相关产品推荐

