Quarkus启动信息打印异常求助:自定义日志过滤器引发格式问题
问题根源
Quarkus启动时的Profile日志是带参数的格式化日志,原始LogRecord里的message字段是占位符模板Profile%s %s activated. %s,参数数组中包含实际填充值(比如dev)。你的自定义过滤器直接修改了这个模板字符串,导致后续日志框架无法用参数正确填充占位符,最终输出未解析的%s。
解决方案
修改过滤器逻辑,先把带参数的模板和参数合并成完整文本,再替换换行符,同时清空参数避免重复格式化:
import io.quarkus.logging.LoggingFilter; import java.util.logging.Filter; import java.util.logging.LogRecord; import java.text.MessageFormat; @LoggingFilter(name = "DefaultConsoleFilter") public class DefaultConsoleFilter implements Filter { @Override public boolean isLoggable(LogRecord record) { String message = record.getMessage(); Object[] params = record.getParameters(); // 处理带参数的格式化日志 if (params != null && params.length > 0) { message = MessageFormat.format(message, params); record.setParameters(null); // 清空参数,防止后续重复格式化 } // 替换换行符 if (message != null) { message = message.replace("\r\n", "\n").replace("\n", "\\n"); } record.setMessage(message); return true; } }
关键说明
- 优先处理带参数的日志:必须先用
MessageFormat将模板和参数合并成完整文本,再做换行符替换,否则占位符无法被正确解析。 - 清空参数数组:避免日志框架后续再次尝试用原始模板格式化,引发异常或错误输出。
- 增加空值判断:防止
message为null时触发空指针异常。
内容的提问来源于stack exchange,提问作者ave4496
相关产品推荐
相关产品推荐

