Fix: Added new logging methods required for Jetty 7.1.x

+ format(msg, arg1, arg2) was refactored to support any number of args
+ The actual logger methods use Array[AnyRef] instead of AnyRef* because
  the latter compiles to scala.Seq and the former to Object[]
This commit is contained in:
Joonas Javanainen 2010-05-24 03:15:40 +08:00 committed by Mark Harrah
parent 600053bf2c
commit 7fa3a7df31
1 changed files with 11 additions and 12 deletions

View File

@ -121,6 +121,9 @@ private class JettyLoggerBase(delegate: Logger)
def info(msg: String, arg0: AnyRef, arg1: AnyRef) { delegate.info(format(msg, arg0, arg1)) }
def debug(msg: String, arg0: AnyRef, arg1: AnyRef) { delegate.debug(format(msg, arg0, arg1)) }
def warn(msg: String, arg0: AnyRef, arg1: AnyRef) { delegate.warn(format(msg, arg0, arg1)) }
def info(msg: String, args: Array[AnyRef]) { delegate.info(format(msg, args: _*)) }
def debug(msg: String, args: Array[AnyRef]) { delegate.debug(format(msg, args: _*)) }
def warn(msg: String, args: Array[AnyRef]) { delegate.warn(format(msg, args: _*)) }
def warn(msg: String, th: Throwable)
{
delegate.warn(msg)
@ -131,19 +134,15 @@ private class JettyLoggerBase(delegate: Logger)
delegate.debug(msg)
delegate.trace(th)
}
private def format(msg: String, arg0: AnyRef, arg1: AnyRef) =
private def format(msg: String, args: AnyRef*) =
{
def toString(arg: AnyRef) = if(arg == null) "" else arg.toString
val pieces = msg.split("""\{\}""", 3)
if(pieces.length == 1)
pieces(0)
else
{
val base = pieces(0) + toString(arg0) + pieces(1)
if(pieces.length == 2)
base
else
base + toString(arg1) + pieces(2)
}
val pieces = msg.split("""\{\}""", args.length + 1).toList
val argStrs = args.map(toString).toList ::: List("")
pieces.zip(argStrs).foldLeft(new StringBuilder) { (sb, pair) =>
val (piece, argStr) = pair
if (piece.isEmpty) sb
else sb.append(piece).append(argStr)
}.toString
}
}