Skip to content

Instantly share code, notes, and snippets.

@vkostyukov
Created February 10, 2017 18:27
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save vkostyukov/79de535825ba18cc6b4a5078f1c8e290 to your computer and use it in GitHub Desktop.
Save vkostyukov/79de535825ba18cc6b4a5078f1c8e290 to your computer and use it in GitHub Desktop.
AccessLog for Finagle
import java.util.concurrent.Executors
import java.io.{File, FileOutputStream, PrintWriter}
import com.twitter.finagle.{Service, SimpleFilter}
import com.twitter.finagle.http.{Request, Response}
import com.twitter.util.Future
final class AccessLog(file: File) extends SimpleFilter[Request, Response] {
private[this] final val scheduler = Executors.newSingleThreadExecutor()
private[this] final def log(r: Request): Unit = {
scheduler.submit(new Runnable {
def run(): Unit = {
val pw = new PrintWriter(new FileOutputStream(file, true))
try pw.println(s"${r.method} ${r.path} [from: ${r.remoteAddress}]") finally pw.close()
}
})
}
def apply(req: Request, next: Service[Request, Response]): Future[Response] = {
log(req)
next(req)
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment