mirror of https://github.com/sbt/sbt.git
Fix logging of raw strings
sbt passes raw string messages in `ConsoleAppenderFromLog4J` to `StringFormatterMessageFactory`. This is wrong because these strings are pre-formatted and should not be processed again for formatting. There is no way to pass parameters to them anyway. This causes problems when the raw strings contain characters that `StringFormatterMessageFactory` wants to interpret. For example, when using `-Ystatistics`: ``` ERROR StatusConsoleListener Unable to format msg: nscprofiling : 1 spans, ()7.543ms (0.3%) java.util.UnknownFormatConversionException: Conversion = ')' at java.base/java.util.Formatter.checkText(Formatter.java:2732) at java.base/java.util.Formatter.parse(Formatter.java:2718) at java.base/java.util.Formatter.format(Formatter.java:2655) at java.base/java.util.Formatter.format(Formatter.java:2609) at java.base/java.lang.String.format(String.java:2938) at org.apache.logging.log4j.message.StringFormattedMessage.formatMessage(StringFormattedMessage.java:121) at org.apache.logging.log4j.message.StringFormattedMessage.getFormattedMessage(StringFormattedMessage.java:89) at sbt.internal.util.Appender.$anonfun$appendMessage$1(ConsoleAppender.scala:522) ... ```
This commit is contained in:
parent
0c6d7b8f30
commit
da79479ff7
|
|
@ -20,7 +20,7 @@ import org.apache.logging.log4j.{ Level => XLevel }
|
|||
import sbt.internal.util.ConsoleAppender._
|
||||
import sbt.util._
|
||||
import org.apache.logging.log4j.core.AbstractLogEvent
|
||||
import org.apache.logging.log4j.message.StringFormatterMessageFactory
|
||||
import org.apache.logging.log4j.message.SimpleMessageFactory
|
||||
import java.util.concurrent.atomic.AtomicReference
|
||||
|
||||
object ConsoleLogger {
|
||||
|
|
@ -598,7 +598,7 @@ private[sbt] class ConsoleAppenderFromLog4J(
|
|||
delegate.append(new AbstractLogEvent {
|
||||
override def getLevel(): XLevel = ConsoleAppender.toXLevel(level)
|
||||
override def getMessage(): Message =
|
||||
StringFormatterMessageFactory.INSTANCE.newMessage(message.toString, Array.empty)
|
||||
SimpleMessageFactory.INSTANCE.newMessage(message.toString, Array.empty)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue