Fix bug when a line happens to parse as JSON but isn't an object.

For example, if `false` happened to be the only value on a line, this
would be parsed as valid JSON (a boolean) but it is not a structured log
message that slfmt should try to parse and format.
This commit is contained in:
Jonathan Bernard 2025-01-20 21:24:22 -06:00
parent 6c978f32cc
commit 11cc9c9a39
2 changed files with 4 additions and 2 deletions

View File

@ -1,6 +1,6 @@
# Package # Package
version = "0.2.0" version = "0.2.1"
author = "Jonathan Bernard" author = "Jonathan Bernard"
description = "Small utility to pretty-print strucutured logs." description = "Small utility to pretty-print strucutured logs."
license = "MIT" license = "MIT"

View File

@ -4,7 +4,7 @@ import docopt, timeutils, zero_functional
from std/logging import Level from std/logging import Level
from std/sequtils import toSeq from std/sequtils import toSeq
const VERSION = "0.2.0" const VERSION = "0.2.1"
const USAGE = """Usage: const USAGE = """Usage:
slfmt [options] slfmt [options]
@ -134,6 +134,8 @@ when isMainModule:
while(sin.readLine(line)): while(sin.readLine(line)):
try: try:
let logJson = parseLogLine(line) let logJson = parseLogLine(line)
if logJson.kind != JObject:
raise newException(JsonParsingError, "Expected a JSON object")
if logLevel.isSome and logJson.hasKey("level"): if logLevel.isSome and logJson.hasKey("level"):
let lvl = parseLogLevel(logJson["level"].getStr) let lvl = parseLogLevel(logJson["level"].getStr)