Skip to content

Commit a6e8691

Browse files
author
jebaras
authored
Merge pull request #47 from LEGO/fix-slf4j-null-bug
Fix bug where feeding null into slf4j would cause woof to fail
2 parents a12f384 + bcae72b commit a6e8691

File tree

2 files changed

+44
-22
lines changed

2 files changed

+44
-22
lines changed

modules/slf4j/src/main/scala/org/legogroup/woof/slf4j/WoofLogger.scala

+25-22
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import org.legogroup.woof.{EnclosingClass, LogInfo, LogLevel, LogLine, Logger as
88
import org.slf4j.Logger
99

1010
import java.io.File
11+
import scala.util.Try
1112
class WoofLogger(name: String) extends Logger:
1213

1314
import WoofLogger.{given_IORuntime, logger}
@@ -35,55 +36,57 @@ class WoofLogger(name: String) extends Logger:
3536
def trace(msg: String): Unit = log(LogLevel.Trace, msg)
3637
def warn(msg: String): Unit = log(LogLevel.Warn, msg)
3738

39+
private def throwableMessage(msg: String, throwable: Throwable) = s"$msg " + Try(throwable.getMessage).getOrElse("")
40+
3841
def debug(msg: String, obj: Object): Unit = debug(s"$msg $obj")
3942
def debug(msg: String, obj1: Object, obj2: Object): Unit = debug(s"$msg $obj1, $obj2")
4043
def debug(msg: String, objs: Array[? <: Object]): Unit = debug(s"$msg ${objs.mkString(", ")}")
41-
def debug(msg: String, throwable: Throwable): Unit = debug(s"$msg ${throwable.getMessage}")
44+
def debug(msg: String, throwable: Throwable): Unit = debug(throwableMessage(msg, throwable))
4245
def debug(x$0: org.slf4j.Marker, msg: String): Unit = debug(msg)
4346
def debug(x$0: org.slf4j.Marker, msg: String, obj: Object): Unit = debug(s"$msg, $obj")
4447
def debug(x$0: org.slf4j.Marker, msg: String, obj1: Object, obj2: Object): Unit = debug(s"$msg, $obj1, $obj2")
4548
def debug(x$0: org.slf4j.Marker, msg: String, objs: Array[? <: Object]): Unit = debug(s"$msg ${objs.mkString(", ")}")
46-
def debug(x$0: org.slf4j.Marker, msg: String, throwable: Throwable): Unit = debug(s"$msg ${throwable.getMessage}")
49+
def debug(x$0: org.slf4j.Marker, msg: String, throwable: Throwable): Unit = debug(throwableMessage(msg, throwable))
4750

4851
def error(msg: String, obj: Object): Unit = error(s"$msg $obj")
4952
def error(msg: String, obj1: Object, obj2: Object): Unit = error(s"$msg $obj1, $obj2")
5053
def error(msg: String, objs: Array[? <: Object]): Unit = error(s"$msg ${objs.mkString(", ")}")
51-
def error(msg: String, throwable: Throwable): Unit = error(s"$msg ${throwable.getMessage}")
54+
def error(msg: String, throwable: Throwable): Unit = error(throwableMessage(msg, throwable))
5255
def error(x$0: org.slf4j.Marker, msg: String): Unit = error(msg)
5356
def error(x$0: org.slf4j.Marker, msg: String, obj: Object): Unit = error(s"$msg $obj")
5457
def error(x$0: org.slf4j.Marker, msg: String, obj1: Object, obj2: Object): Unit = error(s"$msg $obj1, $obj2")
5558
def error(x$0: org.slf4j.Marker, msg: String, objs: Array[? <: Object]): Unit = error(s"$msg ${objs.mkString(", ")}")
56-
def error(x$0: org.slf4j.Marker, msg: String, throwable: Throwable): Unit = error(s"$msg ${throwable.getMessage}")
57-
58-
def info(msg: String, obj: Object): Unit = info(s"$msg, $obj")
59-
def info(msg: String, obj1: Object, obj2: Object): Unit = info(s"$msg, $obj1, $obj2")
60-
def info(msg: String, objs: Array[? <: Object]): Unit = info(s"$msg ${objs.mkString(", ")}")
61-
def info(msg: String, throwable: Throwable): Unit = info(s"$msg ${throwable.getMessage}")
62-
def info(x$0: org.slf4j.Marker, msg: String): Unit = info(msg)
63-
def info(x$0: org.slf4j.Marker, msg: String, obj: Object): Unit = info(s"$msg, $obj")
59+
def error(x$0: org.slf4j.Marker, msg: String, throwable: Throwable): Unit = error(throwableMessage(msg, throwable))
60+
61+
def info(msg: String, obj: Object): Unit = info(s"$msg, $obj")
62+
def info(msg: String, obj1: Object, obj2: Object): Unit = info(s"$msg, $obj1, $obj2")
63+
def info(msg: String, objs: Array[? <: Object]): Unit = info(s"$msg ${objs.mkString(", ")}")
64+
def info(msg: String, throwable: Throwable): Unit = info(throwableMessage(msg, throwable))
65+
def info(x$0: org.slf4j.Marker, msg: String): Unit = info(msg)
66+
def info(x$0: org.slf4j.Marker, msg: String, obj: Object): Unit = info(s"$msg, $obj")
6467
def info(x$0: org.slf4j.Marker, msg: String, obj1: Object, obj2: Object): Unit = info(s"$msg, $obj1, $obj2")
6568
def info(x$0: org.slf4j.Marker, msg: String, objs: Array[? <: Object]): Unit = info(s"$msg ${objs.mkString(", ")}")
66-
def info(x$0: org.slf4j.Marker, msg: String, throwable: Throwable): Unit = info(s"$msg ${throwable.getMessage}")
69+
def info(x$0: org.slf4j.Marker, msg: String, throwable: Throwable): Unit = info(throwableMessage(msg, throwable))
6770

6871
def trace(msg: String, obj: Object): Unit = trace(s"$msg, $obj")
6972
def trace(msg: String, obj1: Object, obj2: Object): Unit = trace(s"$msg, $obj1, $obj2")
7073
def trace(msg: String, objs: Array[? <: Object]): Unit = trace(s"$msg ${objs.mkString(", ")}")
71-
def trace(msg: String, throwable: Throwable): Unit = trace(s"$msg ${throwable.getMessage}")
74+
def trace(msg: String, throwable: Throwable): Unit = trace(throwableMessage(msg, throwable))
7275
def trace(x$0: org.slf4j.Marker, msg: String): Unit = trace(msg)
7376
def trace(x$0: org.slf4j.Marker, msg: String, obj: Object): Unit = trace(s"$msg, $obj")
7477
def trace(x$0: org.slf4j.Marker, msg: String, obj1: Object, obj2: Object): Unit = trace(s"$msg, $obj1, $obj2")
7578
def trace(x$0: org.slf4j.Marker, msg: String, objs: Array[? <: Object]): Unit = trace(s"$msg ${objs.mkString(", ")}")
76-
def trace(x$0: org.slf4j.Marker, msg: String, throwable: Throwable): Unit = trace(s"$msg ${throwable.getMessage}")
77-
78-
def warn(msg: String, obj: Object): Unit = warn(s"$msg, $obj")
79-
def warn(msg: String, obj1: Object, obj2: Object): Unit = warn(s"$msg, $obj1, $obj2")
80-
def warn(msg: String, objs: Array[? <: Object]): Unit = warn(s"$msg ${objs.mkString(", ")}")
81-
def warn(msg: String, throwable: Throwable): Unit = warn(s"$msg ${throwable.getMessage}")
82-
def warn(x$0: org.slf4j.Marker, msg: String): Unit = warn(msg)
83-
def warn(x$0: org.slf4j.Marker, msg: String, obj: Object): Unit = warn(s"$msg, $obj")
79+
def trace(x$0: org.slf4j.Marker, msg: String, throwable: Throwable): Unit = trace(throwableMessage(msg, throwable))
80+
81+
def warn(msg: String, obj: Object): Unit = warn(s"$msg, $obj")
82+
def warn(msg: String, obj1: Object, obj2: Object): Unit = warn(s"$msg, $obj1, $obj2")
83+
def warn(msg: String, objs: Array[? <: Object]): Unit = warn(s"$msg ${objs.mkString(", ")}")
84+
def warn(msg: String, throwable: Throwable): Unit = warn(throwableMessage(msg, throwable))
85+
def warn(x$0: org.slf4j.Marker, msg: String): Unit = warn(msg)
86+
def warn(x$0: org.slf4j.Marker, msg: String, obj: Object): Unit = warn(s"$msg, $obj")
8487
def warn(x$0: org.slf4j.Marker, msg: String, obj1: Object, obj2: Object): Unit = warn(s"$msg, $obj1, $obj2")
8588
def warn(x$0: org.slf4j.Marker, msg: String, objs: Array[? <: Object]): Unit = warn(s"$msg ${objs.mkString(", ")}")
86-
def warn(x$0: org.slf4j.Marker, msg: String, throwable: Throwable): Unit = warn(s"$msg ${throwable.getMessage}")
89+
def warn(x$0: org.slf4j.Marker, msg: String, throwable: Throwable): Unit = warn(throwableMessage(msg, throwable))
8790

8891
private def testLevel(logLevel: LogLevel): Boolean = true
8992

modules/slf4j/src/test/scala/org/legogroup/woof/slf4j/Slf4jSuite.scala

+19
Original file line numberDiff line numberDiff line change
@@ -70,4 +70,23 @@ class Slf4jSuite extends munit.CatsEffectSuite:
7070
end for
7171
}
7272

73+
test("should not fail on null throwable") {
74+
given Printer = NoColorPrinter(testFormatTime)
75+
given Filter = Filter.everything
76+
given Clock[IO] = leetClock
77+
78+
for
79+
stringWriter <- newStringWriter
80+
woofLogger <- DefaultLogger.makeIo(stringWriter)
81+
_ <- woofLogger.registerSlf4j
82+
slf4jLogger <- IO.delay(LoggerFactory.getLogger(this.getClass))
83+
_ <- IO.delay(slf4jLogger.debug("null exception", null))
84+
result <- stringWriter.get
85+
yield assertEquals(
86+
result,
87+
"1987-05-31 13:37:00 [DEBUG] org.legogroup.woof.slf4j.Slf4jSuite: null exception (Slf4jSuite.scala:83)\n",
88+
)
89+
end for
90+
}
91+
7392
end Slf4jSuite

0 commit comments

Comments
 (0)