Skip to content
This repository was archived by the owner on Jan 6, 2023. It is now read-only.

Commit d585869

Browse files
committed
Add loggers for requests and responses
1 parent 9f8af70 commit d585869

3 files changed

Lines changed: 67 additions & 2 deletions

File tree

README.md

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,4 +38,9 @@ The JSON object looks like this as of version 0.0.12:
3838
"vmVersion":"25.131-b11",
3939
"compilerName":"HotSpot 64-Bit Tiered Compilers"
4040
}
41-
```
41+
```
42+
43+
## Build and Publish
44+
Developer's notes on how to publish this artifact on bintray via PowerShell:
45+
* ensure to increment version in `gradle.build`
46+
* `$env:BINTRAY_USER = "debuglevel"; $env:BINTRAY_API_KEY = "SUPER_SECRET"; ./gradlew bintrayUpload`

build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ compileTestKotlin {
2828
}
2929

3030
group 'de.debuglevel.sparkmicroserviceutils'
31-
version '0.0.20'
31+
version '0.0.21'
3232

3333
sourceCompatibility = 1.8
3434

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
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

Comments
 (0)