Quarkus控制台日志仅支持单个过滤器?求可行解决办法
Quarkus的quarkus.log.console.filter属性确实仅支持配置单个命名过滤器,要实现多过滤器效果,有两种可行的解决办法:
1. 实现复合过滤器
创建一个整合了多个过滤器逻辑的复合过滤器类,将其注册为命名过滤器后配置到属性中即可:
首先编写复合过滤器类:
@LoggingFilter(name = "composite-filter") public class CompositeLoggingFilter implements Filter { private final MyFilter myFilter; private final YourFilter yourFilter; // 依赖注入其他过滤器实例 public CompositeLoggingFilter(MyFilter myFilter, YourFilter yourFilter) { this.myFilter = myFilter; this.yourFilter = yourFilter; } @Override public boolean isLoggable(LogRecord record) { // 可根据需求调整逻辑:比如要求所有过滤器都通过,或任意一个通过 return myFilter.isLoggable(record) && yourFilter.isLoggable(record); } }
然后在配置文件中指定这个复合过滤器:
quarkus.log.console.filter=composite-filter
2. 编程式为ConsoleHandler添加多个过滤器
通过Quarkus启动事件,直接获取控制台日志Handler并添加多个过滤器:
import io.quarkus.runtime.StartupEvent; import jakarta.enterprise.context.ApplicationScoped; import jakarta.enterprise.event.Observes; import java.util.logging.ConsoleHandler; import java.util.logging.LogManager; import java.util.logging.Logger; @ApplicationScoped public class LoggingConfigurer { void configureConsoleFilters(@Observes StartupEvent event) { Logger rootLogger = LogManager.getLogManager().getLogger(""); for (var handler : rootLogger.getHandlers()) { if (handler instanceof ConsoleHandler consoleHandler) { // 添加需要的过滤器实例 consoleHandler.addFilter(new MyFilter()); consoleHandler.addFilter(new YourFilter()); // 如果之前配置过命名过滤器,可调用consoleHandler.setFilter(null)移除默认过滤器 } } } }
这种方式无需配置quarkus.log.console.filter,直接通过代码完成多过滤器的添加。
内容的提问来源于stack exchange,提问作者geco17
相关产品推荐
相关产品推荐

