Spaces:
Paused
Paused
| export type ParsedLogLine = { | |
| time?: string; | |
| level?: string; | |
| subsystem?: string; | |
| module?: string; | |
| message: string; | |
| raw: string; | |
| }; | |
| function extractMessage(value: Record<string, unknown>): string { | |
| const parts: string[] = []; | |
| for (const key of Object.keys(value)) { | |
| if (!/^\d+$/.test(key)) { | |
| continue; | |
| } | |
| const item = value[key]; | |
| if (typeof item === "string") { | |
| parts.push(item); | |
| } else if (item != null) { | |
| parts.push(JSON.stringify(item)); | |
| } | |
| } | |
| return parts.join(" "); | |
| } | |
| function parseMetaName(raw?: unknown): { subsystem?: string; module?: string } { | |
| if (typeof raw !== "string") { | |
| return {}; | |
| } | |
| try { | |
| const parsed = JSON.parse(raw) as Record<string, unknown>; | |
| return { | |
| subsystem: typeof parsed.subsystem === "string" ? parsed.subsystem : undefined, | |
| module: typeof parsed.module === "string" ? parsed.module : undefined, | |
| }; | |
| } catch { | |
| return {}; | |
| } | |
| } | |
| export function parseLogLine(raw: string): ParsedLogLine | null { | |
| try { | |
| const parsed = JSON.parse(raw) as Record<string, unknown>; | |
| const meta = parsed._meta as Record<string, unknown> | undefined; | |
| const nameMeta = parseMetaName(meta?.name); | |
| const levelRaw = typeof meta?.logLevelName === "string" ? meta.logLevelName : undefined; | |
| return { | |
| time: | |
| typeof parsed.time === "string" | |
| ? parsed.time | |
| : typeof meta?.date === "string" | |
| ? meta.date | |
| : undefined, | |
| level: levelRaw ? levelRaw.toLowerCase() : undefined, | |
| subsystem: nameMeta.subsystem, | |
| module: nameMeta.module, | |
| message: extractMessage(parsed), | |
| raw, | |
| }; | |
| } catch { | |
| return null; | |
| } | |
| } | |