@@ -28,11 +28,16 @@ import io.ktor.server.engine.embeddedServer
28
28
import io.ktor.server.http.content.staticResources
29
29
import io.ktor.server.netty.Netty
30
30
import io.ktor.server.netty.NettyApplicationEngine
31
+ import io.ktor.server.plugins.callloging.CallLogging
32
+ import io.ktor.server.plugins.callloging.processingTimeMillis
31
33
import io.ktor.server.plugins.contentnegotiation.ContentNegotiation
32
34
import io.ktor.server.plugins.cors.routing.CORS
33
35
import io.ktor.server.plugins.forwardedheaders.ForwardedHeaders
36
+ import io.ktor.server.plugins.origin
34
37
import io.ktor.server.plugins.statuspages.StatusPages
35
38
import io.ktor.server.plugins.swagger.swaggerUI
39
+ import io.ktor.server.request.httpMethod
40
+ import io.ktor.server.request.path
36
41
import io.ktor.server.resources.Resources
37
42
import io.ktor.server.response.respondText
38
43
import io.ktor.server.routing.IgnoreTrailingSlash
@@ -192,6 +197,19 @@ object Main {
192
197
permissionSchema = ModelServerPermissionSchema .SCHEMA
193
198
}
194
199
install(ForwardedHeaders )
200
+ install(CallLogging ) {
201
+ format { call ->
202
+ // Resemble the default format but include remote host and user agent for easier tracing on who issued a certain request.
203
+ // INFO ktor.application - 200 OK: GET - /public/modelix-base.css in 60ms
204
+ val status = call.response.status()
205
+ val httpMethod = call.request.httpMethod.value
206
+ val userAgent = call.request.headers[" User-Agent" ]
207
+ val processingTimeMillis = call.processingTimeMillis()
208
+ val path = call.request.path()
209
+ val remoteHost = call.request.origin.remoteHost
210
+ " $status : $httpMethod - $path in ${processingTimeMillis} ms [Remote host: '$remoteHost ', User agent: '$userAgent ']"
211
+ }
212
+ }
195
213
install(Resources )
196
214
// https://opensource.zalando.com/restful-api-guidelines/#136
197
215
install(IgnoreTrailingSlash )
0 commit comments