Java -使用带有占位符的Slf 4j/Log4jLogger时出现NumberLogger异常

a7qyws3x  于 2023-10-18  发布在  Java
关注(0)|答案(1)|浏览(136)

好吧,我只是想调用。

LOG.info("Info message: {}", "some message")

我得到了一个非常奇怪的例外:

java.lang.IllegalArgumentException: can't parse argument number: 
    at java.base/java.text.MessageFormat.makeFormat(MessageFormat.java:1454)
    at java.base/java.text.MessageFormat.applyPattern(MessageFormat.java:492)
    at java.base/java.text.MessageFormat.<init>(MessageFormat.java:371)
    at java.base/java.text.MessageFormat.format(MessageFormat.java:860)
    at [email protected]//org.jboss.resteasy.logging.impl.Log4jLogger.warn(Log4jLogger.java:109)

Caused by: java.lang.NumberFormatException: For input string: ""
    at java.base/java.lang.NumberFormatException.forInputString(NumberFormatException.java:67)
    at java.base/java.lang.Integer.parseInt(Integer.java:678)
    at java.base/java.lang.Integer.parseInt(Integer.java:786)
    at java.base/java.text.MessageFormat.makeFormat(MessageFormat.java:1452)

无法找出什么是错误的记录器-任何想法,请?

zf2sa74q

zf2sa74q1#

看起来你的日志实现使用了java.text.MessageFormat。* 最终 *,info(String format, Object... args)方法调用MessageFormat.format(String pattern,Object. args)方法,该方法需要MessageFormat的Patterns and Their Interpretation中描述的模式。
因此,在本例中,传入info方法的第一个参数中的花括号内容被解释为FormatElement,这至少需要一个(非负整数)索引,该索引应指向传入info方法的下一个参数。因此,{0}参考工作。
为了说明,你也可以这样做:

LOG.info("Info message: on {1, date} at {1, time} I received {0}.", "some message", new Date());

它应该产生这样的结果:
信息消息:在2021年11月16日下午1:05:01我收到了一些消息。

相关问题