Quarkus: Logging an argument with a '{' leads to FORMAT_FAILURE

Created on 9 Oct 2020  路  7Comments  路  Source: quarkusio/quarkus

Describe the bug
execute this in a quarkus application:

log.info("{}", "hello{");

Expected behavior

17:58:11,190  INFO com....MyClass hello{

Actual behavior

LogManager error of type FORMAT_FAILURE: Formatting error
java.lang.IllegalArgumentException: Unmatched braces in the pattern.
        at java.base/java.text.MessageFormat.applyPattern(MessageFormat.java:520)
        at java.base/java.text.MessageFormat.<init>(MessageFormat.java:370)
        at java.base/java.text.MessageFormat.format(MessageFormat.java:859)
        at org.jboss.logmanager.ExtFormatter.formatMessageLegacy(ExtFormatter.java:107)
        at org.jboss.logmanager.ExtFormatter.formatMessage(ExtFormatter.java:70)
        at org.jboss.logmanager.formatters.Formatters$16.renderRaw(Formatters.java:781)
        at org.jboss.logmanager.formatters.Formatters$JustifyingFormatStep.render(Formatters.java:221)
        at org.jboss.logmanager.formatters.MultistepFormatter.format(MultistepFormatter.java:86)
        at io.quarkus.runtime.logging.BannerFormatter.format(BannerFormatter.java:56)
        at org.jboss.logmanager.ExtFormatter.format(ExtFormatter.java:32)
        at org.jboss.logmanager.handlers.WriterHandler.doPublish(WriterHandler.java:43)
        at org.jboss.logmanager.ExtHandler.publish(ExtHandler.java:66)
        at org.jboss.logmanager.handlers.DelayedHandler.publishToChildren(DelayedHandler.java:208)
        at org.jboss.logmanager.handlers.DelayedHandler.doPublish(DelayedHandler.java:49)
        at org.jboss.logmanager.ExtHandler.publish(ExtHandler.java:66)
        at org.jboss.logmanager.LoggerNode.publish(LoggerNode.java:316)
        at org.jboss.logmanager.LoggerNode.publish(LoggerNode.java:324)
        at org.jboss.logmanager.LoggerNode.publish(LoggerNode.java:324)
        at org.jboss.logmanager.LoggerNode.publish(LoggerNode.java:324)
        at org.jboss.logmanager.LoggerNode.publish(LoggerNode.java:324)
        at org.jboss.logmanager.LoggerNode.publish(LoggerNode.java:324)
        at org.jboss.logmanager.Logger.logRaw(Logger.java:748)
        at org.jboss.logmanager.Logger.log(Logger.java:706)
        at org.jboss.logging.JBossLogManagerLogger.doLog(JBossLogManagerLogger.java:44)
        at org.jboss.logging.Logger.log(Logger.java:2103)
        at org.jboss.slf4j.JBossLoggerAdapter.log(JBossLoggerAdapter.java:302)
        at org.jboss.slf4j.JBossLoggerAdapter.info(JBossLoggerAdapter.java:180)
        at com...MyClass.run(MyClass.java:78)

It sounds like the argument is interpreted itself as a pattern.

This leads to issues when libraries pass arguments that include tokens that are recognized by the java.text.MessageFormat as pattern reserved symbols.
Such as https://github.com/hierynomus/smbj/blob/master/src/main/java/com/hierynomus/smbj/connection/ConnectionInfo.java#L128-L140

kinbug triagduplicate

Most helpful comment

Yes, 1.9.0.CR1 does not contain the fix. It will be included in 1.9.0.Final.

All 7 comments

@vsevel does this happen in Quarkus 1.8.2.Final too?

I think this is a duplicate of https://github.com/quarkusio/quarkus/issues/12615 .

Can you try with the just released 1.8.3.Final?

@gastaldi @gsmet I confirm the problem is on 1.8.2 but not on 1.8.3

Closing then as it is fixed in 1.8.3. Thanks!

@gastaldi well the issue is for 1.9.0.CR1 (which as the problem), not for 1.8.X

Ah maybe the fix wasn't available when 1.9.0
CR1 was released? Can you give it a try with the latest master?

Yes, 1.9.0.CR1 does not contain the fix. It will be included in 1.9.0.Final.

Was this page helpful?
0 / 5 - 0 ratings

Related issues

emmanuelbernard picture emmanuelbernard  路  3Comments

gastaldi picture gastaldi  路  3Comments

blsouthr picture blsouthr  路  3Comments

halhelal picture halhelal  路  3Comments

hantsy picture hantsy  路  3Comments