diff --git a/app/controllers/filters/Filters.scala b/app/controllers/filters/Filters.scala new file mode 100644 index 0000000..481949c --- /dev/null +++ b/app/controllers/filters/Filters.scala @@ -0,0 +1,9 @@ +package controllers.filters + +import jakarta.inject.Inject +import play.api.http.{DefaultHttpFilters, EnabledFilters} + +class Filters @Inject() ( + defaultFilters: EnabledFilters, + log: LoggingFilter + ) extends DefaultHttpFilters(defaultFilters.filters :+ log *) diff --git a/app/controllers/filters/LoggingFilter.scala b/app/controllers/filters/LoggingFilter.scala new file mode 100644 index 0000000..e35d7fd --- /dev/null +++ b/app/controllers/filters/LoggingFilter.scala @@ -0,0 +1,25 @@ +package controllers.filters + +import jakarta.inject.Inject +import org.apache.pekko.stream.Materializer +import play.api.Logger +import play.api.mvc._ + +import scala.concurrent.{ExecutionContext, Future} + +class LoggingFilter @Inject()(implicit val mat: Materializer, ec: ExecutionContext) extends Filter { + private val logger = Logger("application.controllers") + + override def apply(nextFilter: RequestHeader => Future[Result])(requestHeader: RequestHeader): Future[Result] = { + val startTime = System.currentTimeMillis() + + nextFilter(requestHeader).map{ result => + val endTime = System.currentTimeMillis() + val requestTime = endTime - startTime + + logger.info(s"${requestHeader.method} ${requestHeader.uri} ${result.header.status} $requestTime") + + result + } + } +} diff --git a/conf/application.conf b/conf/application.conf index 56a51aa..90c5950 100644 --- a/conf/application.conf +++ b/conf/application.conf @@ -1,5 +1,7 @@ # https://www.playframework.com/documentation/latest/Configuration +play.http.filters=controllers.filters.Filters + slick.dbs.default = { profile = "slick.jdbc.PostgresProfile$" db = {