使用Slf4j/Log4jLogger占位符时出现NumberFormatException异常如何解决
核心原因
你当前使用的日志实现为JBoss Resteasy自带的org.jboss.resteasy.logging.impl.Log4jLogger,该类的日志格式化逻辑基于JDK的java.text.MessageFormat实现,不支持SLF4J风格的无序号占位符{}。
报错根由
MessageFormat要求占位符必须填写对应参数的索引序号,格式为{0}、{1}、{2},依次对应传入的第1、2、3个参数。你代码中使用的空占位符{}在解析时会被识别为参数序号为空字符串,无法转换为数字,因此抛出NumberFormatException异常。
解决方案
- 方案1:调整日志占位符写法适配
MessageFormat规则,修改代码为:
LOG.info("Info message: {0}", "some message")
- 方案2:如果项目整体遵循SLF4J日志规范,可修改Resteasy的日志绑定配置,强制使用SLF4J实现替换Resteasy自带的
Log4jLogger,调整完成后即可正常使用{}格式的无序号占位符。
内容的提问来源于stack exchange,提问作者eldar.j
相关产品推荐
相关产品推荐

