Skip to content

Commit

Permalink
Replace string-interpolation in log messages with sprintf-style loggi…
Browse files Browse the repository at this point in the history
…ng (linkerd#1604)

Closes linkerd#1592
  • Loading branch information
cponomaryov authored and hawkw committed Aug 23, 2017
1 parent 0d63041 commit 797cf84
Show file tree
Hide file tree
Showing 24 changed files with 69 additions and 67 deletions.
2 changes: 1 addition & 1 deletion admin/src/main/scala/io/buoyant/admin/Admin.scala
Original file line number Diff line number Diff line change
Expand Up @@ -128,7 +128,7 @@ class Admin(val address: InetSocketAddress, tlsCfg: Option[TlsServerConfig]) {
val handlers = baseHandlers ++ appHandlers(app) ++ extHandlers
val muxer = (handlers ++ indexHandlers(handlers)).foldLeft(new HttpMuxer) {
case (muxer, Handler(url, service, _)) =>
log.debug(s"admin: $url => ${service.getClass.getName}")
log.debug("admin: %s => %s", url, service.getClass.getName)
muxer.withHandler(url, service)
}
HeadFilter andThen notFoundView andThen muxer
Expand Down
6 changes: 3 additions & 3 deletions consul/src/main/scala/io/buoyant/consul/v1/BaseApi.scala
Original file line number Diff line number Diff line change
Expand Up @@ -28,16 +28,16 @@ trait BaseApi extends Closable {
RetryPolicy.backoff(backoffs) {
// We will assume 5xx are retryable, everything else is not for now
case (req, Return(rep)) if rep.status.code >= 500 && rep.status.code < 600 =>
log.error(s"Retrying Consul request '${req.method} ${req.uri}' on ${UnexpectedResponse(rep)}")
log.error("Retrying Consul request '%s %s' on %s", req.method, req.uri, UnexpectedResponse(rep))
true

case (req, Throw(Failure(Some(err: ConnectionFailedException)))) if req.getParamNames().contains("index") =>
log.error(s"Will not retry blocking index request '${req.method} ${req.uri}' on error: $err")
log.error("Will not retry blocking index request '%s %s' on error: %s", req.method, req.uri, err)
false
// Don't retry on interruption
case (_, Throw(e: Failure)) if e.isFlagged(Failure.Interrupted) => false
case (req, Throw(NonFatal(ex))) =>
log.error(s"Retrying Consul request '${req.method} ${req.uri}' on NonFatal error: $ex")
log.error("Retrying Consul request '%s %s' on NonFatal error: %s", req.method, req.uri, ex)
true
},
HighResTimer.Default,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,37 +11,37 @@ private[h2] class DebugHandler(prefix: String)
private[this] val log = Logger.get("h2")

override def handlerAdded(ctx: ChannelHandlerContext): Unit = {
log.debug(s"$prefix.handlerAdded ${ctx.channel}")
log.debug("%s.handlerAdded %s", prefix, ctx.channel)
super.handlerAdded(ctx)
}

override def handlerRemoved(ctx: ChannelHandlerContext): Unit = {
log.debug(s"$prefix.handlerRemoved ${ctx.channel}")
log.debug("%s.handlerRemoved %s", prefix, ctx.channel)
super.handlerRemoved(ctx)
}

override def channelActive(ctx: ChannelHandlerContext): Unit = {
log.debug(s"$prefix.channelActive ${ctx.channel}")
log.debug("%s.channelActive %s", prefix, ctx.channel)
super.channelActive(ctx)
}

override def channelInactive(ctx: ChannelHandlerContext): Unit = {
log.debug(s"$prefix.channelInactive ${ctx.channel}")
log.debug("%s.channelInactive %s", prefix, ctx.channel)
super.channelInactive(ctx)
}

override def channelRead(ctx: ChannelHandlerContext, obj: Any): Unit = {
log.debug(s"$prefix.channelRead ${ctx.channel} $obj")
log.debug("%s.channelRead %s %s", prefix, ctx.channel, obj)
super.channelRead(ctx, obj)
}

override def channelReadComplete(ctx: ChannelHandlerContext): Unit = {
log.debug(s"$prefix.channelReadComplete ${ctx.channel}")
log.debug("%s.channelReadComplete %s", prefix, ctx.channel)
super.channelReadComplete(ctx)
}

override def userEventTriggered(ctx: ChannelHandlerContext, ev: Any): Unit = {
log.debug(s"$prefix.userEventTriggered ${ctx.channel} $ev")
log.debug("%s.userEventTriggered %s %s", prefix, ctx.channel, ev)
val _ = ctx.fireUserEventTriggered(ev)
}

Expand All @@ -67,12 +67,12 @@ private[h2] class DebugHandler(prefix: String)
case obj => obj.toString
}

log.debug(s"$reqid $prefix.write ${ctx.channel} [$objstr]")
log.debug("%d %s.write %s [%s]", reqid, prefix, ctx.channel, objstr)
p.addListener(new ChannelFutureListener {
override def operationComplete(cf: ChannelFuture): Unit = {
cf.cause match {
case null => log.debug(s"$reqid $prefix.write.complete ${cf.channel} [$objstr] $cf")
case e => log.debug(e, s"$reqid $prefix.write.complete ${cf.channel} [$objstr] $cf")
case null => log.debug("%d %s.write.complete %s [%s] %s", reqid, prefix, cf.channel, objstr, cf)
case e => log.debug(e, "%d %s.write.complete %s [%s] %s", reqid, prefix, cf.channel, objstr, cf)
}
}
})
Expand All @@ -81,10 +81,10 @@ private[h2] class DebugHandler(prefix: String)
}

override def close(ctx: ChannelHandlerContext, p: ChannelPromise): Unit = {
log.debug(s"$prefix.close ${ctx.channel}")
log.debug("%s.close %s", prefix, ctx.channel)
p.addListener(new ChannelFutureListener {
override def operationComplete(cf: ChannelFuture): Unit =
log.debug(s"$prefix.close.complete ${ctx.channel} $cf")
log.debug("%s.close.complete %s %s", prefix, ctx.channel, cf)
})
super.close(ctx, p)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,7 @@ class ServerUpgradeHandler(h2Framer: H2FrameCodec) extends ChannelDuplexHandler

// Stop trying to upgrade the protocol.
ctx.pipeline.remove(this)
log.debug(s"h2 server pipeline: installing framer: ${ctx.pipeline}")
log.debug("h2 server pipeline: installing framer: %s", ctx.pipeline)

// Pass it on.
ctx.fireChannelRead(obj); ()
Expand Down
4 changes: 2 additions & 2 deletions k8s/src/main/scala/io/buoyant/k8s/Watchable.scala
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ private[k8s] abstract class Watchable[O <: KubeObject: TypeReference, W <: Watch
// Don't retry on interruption
case (_, Throw(e: Failure)) if e.isFlagged(Failure.Interrupted) => false
case (_, Throw(NonFatal(ex))) =>
log.error(s"retrying k8s request to $path on error $ex")
log.error("retrying k8s request to %s on error %s", path, ex)
true
},
HighResTimer.Default,
Expand Down Expand Up @@ -129,7 +129,7 @@ private[k8s] abstract class Watchable[O <: KubeObject: TypeReference, W <: Watch

case status =>
close.set(Closable.nop)
log.debug(s"k8s failed to watch resource $path: ${status.code} ${status.reason}")
log.debug("k8s failed to watch resource %s: %d %s", path, status.code, status.reason)
val f = Future.exception(Api.UnexpectedResponse(rsp))
AsyncStream.fromFuture(f)
}
Expand Down
2 changes: 1 addition & 1 deletion k8s/src/main/scala/io/buoyant/k8s/istio/ClusterCache.scala
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ class ClusterCache(client: DiscoveryClient) extends Closable {
case Array(dest, port) =>
vHost.domains.map(_ -> Cluster(dest, port))
case _ => // vHost name is invalid
log.error(s"Invalid virtual_host name: ${vHost.name}")
log.error("Invalid virtual_host name: %s", vHost.name)
Nil
}
}.toMap
Expand Down
2 changes: 1 addition & 1 deletion k8s/src/main/scala/io/buoyant/k8s/istio/MixerClient.scala
Original file line number Diff line number Diff line change
Expand Up @@ -125,7 +125,7 @@ case class MixerClient(service: Service[h2.Request, h2.Response]) {
nanos = Some((duration.inNanoseconds - duration.inLongSeconds * 1000000000L).toInt)
)
)
log.trace(s"MixerClient.report: $reportRequest")
log.trace("MixerClient.report: %s", reportRequest)
client.report(Stream.value(reportRequest))
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ abstract class PollingApiClient(client: Service[Request, Response]) {
def doUpdate() = get[T](url).respond {
case Return(rsp) => update.update(Activity.Ok(rsp))
case Throw(e) =>
log.error(e, s"failed to watch resource: $url")
log.error(e, "failed to watch resource: %s", url)
update.update(Activity.Failed(e))
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ object MetricsPruningModule {
new ServiceFactoryProxy[Req, Rep](next) {
override def close(deadline: Time): Future[Unit] = {
self.close(deadline).respond { _ =>
log.info(s"Reaping ${label.label}")
log.info("Reaping %s", label.label)
statsReceiver.prune()
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -201,7 +201,7 @@ class UsageDataTelemeter(
private[this] val metricsService = httpClient.newService(metricsDst, "usageData")
private[this] val started = new AtomicBoolean(false)
private[this] val pid = java.util.UUID.randomUUID().toString
log.info(s"connecting to usageData proxy at $metricsDst")
log.info("connecting to usageData proxy at %s", metricsDst)
val client = Client(metricsService, config, pid, orgId)

val adminHandlers = Seq(
Expand Down
4 changes: 2 additions & 2 deletions linkerd/main/src/main/scala/io/buoyant/linkerd/Main.scala
Original file line number Diff line number Diff line change
Expand Up @@ -66,12 +66,12 @@ object Main extends App {
linker: Linker
): Seq[Closable with Awaitable[Unit]] = {
val server = linker.admin.serve(this, LinkerdAdmin(config, linker))
log.info(s"serving ${linker.admin.scheme} admin on ${server.boundAddress}")
log.info("serving %s admin on %s", linker.admin.scheme, server.boundAddress)

config.admin.flatMap(_.httpIdentifierPort) match {
case Some(p) =>
val idServer = linker.admin.serveHandler(p.port, LinkerdAdmin.identifierHandler(config, linker))
log.info(s"serving http identifier on ${idServer.boundAddress}")
log.info("serving http identifier on %s", idServer.boundAddress)
Seq(server, idServer)
case None => Seq(server)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ case class IstioLoggerConfig(
private[h2] val host = mixerHost.getOrElse(DefaultMixerHost)
@JsonIgnore
private[h2] val port = mixerPort.map(_.port).getOrElse(DefaultMixerPort)
log.info(s"connecting to Istio Mixer at $host:$port")
log.info("connecting to Istio Mixer at %s:%d", host, port)

@JsonIgnore
private[this] val mixerDst = Name.bound(Address(host, port))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,8 @@ case class AccessLogger(log: Logger) extends SimpleFilter[Request, Response] {
val statusCode = rsp.statusCode
val responseBytes = rsp.contentLength.map(_.toString).getOrElse("-")
val requestEndTime = new TimeFormat("dd/MM/yyyy:HH:mm:ss Z").format(Time.now)
log.info(s"""$hostHeader $remoteHost $identd $user [$requestEndTime] "$reqResource" $statusCode $responseBytes "$referer" "$userAgent"""")
log.info("""%s %s %s %s [%s] "%s" %d %s "%s" "%s"""", hostHeader, remoteHost, identd, user, requestEndTime,
reqResource, statusCode, responseBytes, referer, userAgent)
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ case class IstioLoggerConfig(
private[http] val host = mixerHost.getOrElse(DefaultMixerHost)
@JsonIgnore
private[http] val port = mixerPort.map(_.port).getOrElse(DefaultMixerPort)
log.info(s"connecting to Istio Mixer at $host:$port")
log.info("connecting to Istio Mixer at %s:%d", host, port)

@JsonIgnore
private[this] val mixerDst = Name.bound(Address(host, port))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,22 +3,23 @@ package io.buoyant.linkerd.protocol.http
import com.twitter.finagle.Service
import com.twitter.finagle.http._
import com.twitter.util.{Future, Promise, Time}
import com.twitter.logging.Logger
import com.twitter.logging._
import io.buoyant.test.Awaits
import java.util.{logging => javalog}
import org.scalatest.FunSuite
import java.lang.{StringBuilder => JStringBuilder}

class AccessLoggerTest extends FunSuite with Awaits {

object StringLogger extends Logger("string", javalog.Logger.getAnonymousLogger()) {
val logged = new JStringBuilder(2048)
val handler = new StringHandler(new Formatter {
override def format(record: javalog.LogRecord): String = formatText(record)
}, None)

override def info(msg: String, items: Any*) {
val _ = logged.append(msg)
}
clearHandlers()
addHandler(handler)
setLevel(Level.INFO)

def getLoggedLines(): String = logged.toString()
def getLoggedLines(): String = handler.get
}

test("access logger filter") {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,7 @@ class CuratorNamer(zkConnect: String, basePath: String, idPrefix: Path) extends
val serviceCache = serviceDiscovery.map { disco =>
val cache = disco.serviceCacheBuilder().name(serviceName).build()
cache.start()
log.info(s"Curator service cache started for $serviceName")
log.info("Curator service cache started for %s", serviceName)
cache
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ private[namerd] case class NamerdConfig(
telem.tracer match {
case s: NullTracer =>
case _ =>
log.warning(s"Telemeter ${t.getClass.getCanonicalName} defines a tracer but namerd doesn't support tracing")
log.warning("Telemeter %s defines a tracer but namerd doesn't support tracing", t.getClass.getCanonicalName)
}
telem
} :+ adminTelemeter
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -91,15 +91,15 @@ class ThriftNamerClient(

// XXX we have to handle other errors, right?
case Throw(e) =>
log.error(e, s"""bind ${path.show}""")
log.error(e, "bind %s", path.show)
Trace.recordBinary("namerd.client/bind.exc", e.toString)
states() = Activity.Failed(e)
}
}

loop(TStamp.empty)
Closable.make { deadline =>
log.debug(s"""bind released ${path.show}""")
log.debug("bind released %s", path.show)
stopped = true
Future.Unit
}
Expand Down Expand Up @@ -196,15 +196,15 @@ class ThriftNamerClient(
}

case Throw(e) =>
log.error(e, s"addr on $idPath")
log.error(e, "addr on %s", idPath)
Trace.recordBinary("namerd.client/addr.exc", e.getMessage)
addr() = Addr.Failed(e)
}
}

loop(TStamp.empty)
Closable.make { deadline =>
log.debug(s"addr released $idPath")
log.debug("addr released %s", idPath)
stopped = true
Future.Unit
}
Expand Down Expand Up @@ -286,7 +286,7 @@ class ThriftNamerClient(
loop(stamp1)

case Throw(e@thrift.DelegationFailure(reason)) =>
log.error(s"delegation failed: $reason")
log.error("delegation failed: %s", reason)
states() = Activity.Failed(e)

case Throw(e) =>
Expand Down Expand Up @@ -325,18 +325,18 @@ class ThriftNamerClient(
loop(stamp1)

case Throw(e@thrift.DtabFailure(reason)) =>
log.error(s"dtab $namespace lookup failed: $reason")
log.error("dtab %s lookup failed: %s", namespace, reason)
states() = Activity.Failed(e)

case Throw(e) =>
log.error(e, s"dtab $namespace lookup failed")
log.error(e, "dtab %s lookup failed", namespace)
states() = Activity.Failed(e)
}
}

loop(TStamp.empty)
Closable.make { deadline =>
log.debug(s"dtab $namespace released")
log.debug("dtab %s released", namespace)
stopped = true
Future.Unit
}
Expand Down
4 changes: 2 additions & 2 deletions namerd/main/src/main/scala/io/buoyant/namerd/Main.scala
Original file line number Diff line number Diff line change
Expand Up @@ -17,11 +17,11 @@ object Main extends App {
val namerd = config.mk()

val admin = namerd.admin.serve(this, NamerdAdmin(config, namerd))
log.info(s"serving ${namerd.admin.scheme} on ${admin.boundAddress}")
log.info("serving %s on %s", namerd.admin.scheme, admin.boundAddress)

val servers = namerd.interfaces.map { iface =>
val server = iface.serve()
log.info(s"serving ${iface.kind} interface on ${server.boundAddress}")
log.info("serving %s interface on %s", iface.kind, server.boundAddress)
server
}
val telemeters = namerd.telemeters.map(_.run())
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ class ZkDtabStore(

def create(ns: String, dtab: Dtab): Future[Unit] = {
val path = s"$zkPrefix/$ns"
log.info(s"Attempting to create dtab at $path")
log.info("Attempting to create dtab at %s", path)

zkSession.zk.create(
path,
Expand All @@ -71,7 +71,7 @@ class ZkDtabStore(

def delete(ns: String): Future[Unit] = {
val path = s"$zkPrefix/$ns"
log.info(s"Attempting to delete dtab at $path")
log.info("Attempting to delete dtab at %s", path)

zkSession.zk.delete(path, None).rescue {
case KeeperException.NoNode(_) =>
Expand All @@ -83,7 +83,7 @@ class ZkDtabStore(

override def update(ns: String, dtab: Dtab, version: Buf): Future[Unit] = {
val path = s"$zkPrefix/$ns"
log.info(s"Attempting to update dtab at $path")
log.info("Attempting to update dtab at %s", path)

zkSession.zk.setData(
path,
Expand All @@ -98,7 +98,7 @@ class ZkDtabStore(

def observe(ns: String): Activity[Option[VersionedDtab]] = {
val path = s"$zkPrefix/$ns"
log.info(s"Attempting to observe $path")
log.info("Attempting to observe %s", path)

actOf(_.getDataWatch(path)).flatMap { data =>
data.data match {
Expand All @@ -116,7 +116,7 @@ class ZkDtabStore(

override def put(ns: String, dtab: Dtab): Future[Unit] = {
val path = s"$zkPrefix/$ns"
log.info(s"Attempting to put dtab at $path")
log.info("Attempting to put dtab at %s", path)

// Send a create and a setData at the same time in hopes that one of them will succeed.
// If both fail, the user can always retry the put.
Expand Down
Loading

0 comments on commit 797cf84

Please sign in to comment.