mirror of https://github.com/sbt/sbt.git
Only evaluate log message thunk once
When there are multiple console appenders for a logger, we inadvertently evaluated the message thunk for each appender which would cause side effects to be unexpectedely evaluated multiple times. Fixes part of #6126.
This commit is contained in:
parent
a185e24fff
commit
3ff85b175d
|
|
@ -116,11 +116,13 @@ object LoggerContext {
|
||||||
private class Log extends MiniLogger {
|
private class Log extends MiniLogger {
|
||||||
private val consoleAppenders: java.util.Vector[(Appender, Level.Value)] =
|
private val consoleAppenders: java.util.Vector[(Appender, Level.Value)] =
|
||||||
new java.util.Vector
|
new java.util.Vector
|
||||||
def log(level: Level.Value, message: => String): Unit =
|
def log(level: Level.Value, message: => String): Unit = {
|
||||||
consoleAppenders.forEach {
|
val toAppend = consoleAppenders.asScala.filter { case (a, l) => level.compare(l) >= 0 }
|
||||||
case (a, l) =>
|
if (toAppend.nonEmpty) {
|
||||||
if (level.compare(l) >= 0) a.appendLog(level, message)
|
val m = message
|
||||||
|
toAppend.foreach { case (a, l) => a.appendLog(level, m) }
|
||||||
}
|
}
|
||||||
|
}
|
||||||
def log[T](level: Level.Value, message: ObjectEvent[T]): Unit = {
|
def log[T](level: Level.Value, message: ObjectEvent[T]): Unit = {
|
||||||
consoleAppenders.forEach {
|
consoleAppenders.forEach {
|
||||||
case (a, l) =>
|
case (a, l) =>
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue