Skip to content

Commit d6f8342

Browse files
committed
Kotlin: Write the log file as Line-delimited JSON
1 parent b5ad6f9 commit d6f8342

File tree

1 file changed

+24
-5
lines changed
  • java/kotlin-extractor/src/main/kotlin/utils

1 file changed

+24
-5
lines changed

java/kotlin-extractor/src/main/kotlin/utils/Logger.kt

Lines changed: 24 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,25 @@ class LogMessage(private val kind: String, private val message: String) {
4242
fun toText(): String {
4343
return "[$timestamp K] [$kind] $message"
4444
}
45+
46+
private fun escape(str: String): String {
47+
return str.replace("\\", "\\\\")
48+
.replace("\"", "\\\"")
49+
.replace("/", "\\/")
50+
.replace("\b", "\\b")
51+
.replace("\u000C", "\\f")
52+
.replace("\n", "\\n")
53+
.replace("\r", "\\r")
54+
.replace("\t", "\\t")
55+
}
56+
57+
fun toJsonLine(): String {
58+
val kvs = listOf(Pair("origin", "CodeQL Kotlin extractor"),
59+
Pair("timestamp", timestamp),
60+
Pair("kind", kind),
61+
Pair("message", message))
62+
return "{ " + kvs.map { p -> "\"${p.first}\": \"${escape(p.second)}\""}.joinToString(", ") + " }\n"
63+
}
4564
}
4665

4766
data class ExtractorContext(val kind: String, val element: IrElement, val name: String, val loc: String)
@@ -127,30 +146,30 @@ open class LoggerBase(val logCounter: LogCounter) {
127146
val diagLabel = tw.getFreshIdLabel<DbDiagnostic>()
128147
tw.writeDiagnostics(diagLabel, "CodeQL Kotlin extractor", severity.sev, "", msg, "${logMessage.timestamp} $fullMsg", locationId)
129148
tw.writeDiagnostic_for(diagLabel, StringLabel("compilation"), file_number, file_number_diagnostic_number++)
130-
logStream.write(logMessage.toText() + "\n")
149+
logStream.write(logMessage.toJsonLine())
131150
}
132151

133152
fun trace(tw: TrapWriter, msg: String) {
134153
if (verbosity >= 4) {
135154
val logMessage = LogMessage("TRACE", msg)
136155
tw.writeComment(logMessage.toText())
137-
logStream.write(logMessage.toText() + "\n")
156+
logStream.write(logMessage.toJsonLine())
138157
}
139158
}
140159

141160
fun debug(tw: TrapWriter, msg: String) {
142161
if (verbosity >= 4) {
143162
val logMessage = LogMessage("DEBUG", msg)
144163
tw.writeComment(logMessage.toText())
145-
logStream.write(logMessage.toText() + "\n")
164+
logStream.write(logMessage.toJsonLine())
146165
}
147166
}
148167

149168
fun info(tw: TrapWriter, msg: String) {
150169
if (verbosity >= 3) {
151170
val logMessage = LogMessage("INFO", msg)
152171
tw.writeComment(logMessage.toText())
153-
logStream.write(logMessage.toText() + "\n")
172+
logStream.write(logMessage.toJsonLine())
154173
}
155174
}
156175

@@ -173,7 +192,7 @@ open class LoggerBase(val logCounter: LogCounter) {
173192
// to be an error regardless.
174193
val logMessage = LogMessage("ERROR", "Total of $count diagnostics from $caller.")
175194
tw.writeComment(logMessage.toText())
176-
logStream.write(logMessage.toText() + "\n")
195+
logStream.write(logMessage.toJsonLine())
177196
}
178197
}
179198
}

0 commit comments

Comments
 (0)