1+ package de.debuglevel.microservices.utils.logging
2+
3+ import mu.KotlinLogging
4+ import spark.Request
5+ import spark.Response
6+ import java.nio.charset.Charset
7+ import java.time.LocalDateTime
8+
9+ private val logger = KotlinLogging .logger {}
10+
11+ fun buildRequestLog (request : Request ): String {
12+ val accept = request.headers(" accept" ) ? : " <UNKNOWN>"
13+
14+ return " Handling ${request.protocol()} ${request.requestMethod()} ${request.url()} from ${request.ip()} accepting $accept ..."
15+ }
16+
17+ fun buildResponseLog (request : Request , response : Response ): String {
18+ val raw = response.raw()
19+
20+ val accept = request.headers(" accept" ) ? : " <UNKNOWN>"
21+ val statuscode = raw.status
22+ val contentType = raw.getHeader(" content-type" ) ? : " <UNKNOWN>"
23+
24+ request.raw()
25+
26+ val size = try {
27+ response.body().toByteArray(Charset .forName(raw.characterEncoding)).size.toString() + " bytes"
28+ } catch (e: Exception ) {
29+ " unknown bytes"
30+ }
31+
32+ return " Handled ${request.protocol()} ${request.requestMethod()} ${request.url()} from ${request.ip()} accepting $accept with status $statuscode content-type $contentType size $size ..."
33+ }
34+
35+ fun buildCommongLogFormat (request : Request , response : Response ): String {
36+ val raw = response.raw()
37+
38+ val size = try {
39+ response.body().toByteArray(Charset .forName(raw.characterEncoding)).size.toString()
40+ } catch (e: Exception ) {
41+ " -"
42+ }
43+
44+ // Common Log Format requires strftime format "%d/%b/%Y:%H:%M:%S %z" resulting in stupid "[10/Oct/2000:13:55:36 -0700]". Using ISO instead for now.
45+ val datetime = " [${LocalDateTime .now()} ]"
46+
47+ val ip = request.ip()
48+ val useridentifier = " -"
49+ val userid = " -"
50+ val requestline = " \" ${request.requestMethod()} ${request.url()} ${request.protocol()} \" "
51+ val statuscode = raw.status
52+
53+ // add accept header as additional column
54+ val accept = request.headers(" accept" ) ? : " -"
55+
56+ // add returned content type as additional column
57+ val contentType = raw.getHeader(" content-type" ) ? : " -"
58+
59+ return " $ip $useridentifier $userid $datetime $requestline $statuscode $size $accept $contentType "
60+ }
0 commit comments