refactor(logging): shorten subsystem prefixes
This commit is contained in:
@@ -76,6 +76,7 @@ Behavior:
|
|||||||
- **Subsystem prefixes** on every line (e.g. `[gateway]`, `[canvas]`, `[tailscale]`)
|
- **Subsystem prefixes** on every line (e.g. `[gateway]`, `[canvas]`, `[tailscale]`)
|
||||||
- **Subsystem colors** (stable per subsystem) plus level coloring
|
- **Subsystem colors** (stable per subsystem) plus level coloring
|
||||||
- **Color when output is a TTY or the environment looks like a rich terminal** (`TERM`/`COLORTERM`/`TERM_PROGRAM`), respects `NO_COLOR`
|
- **Color when output is a TTY or the environment looks like a rich terminal** (`TERM`/`COLORTERM`/`TERM_PROGRAM`), respects `NO_COLOR`
|
||||||
|
- **Shortened subsystem prefixes**: drops leading `gateway/` + `providers/`, keeps last 2 segments (e.g. `whatsapp/outbound`)
|
||||||
- **Sub-loggers by subsystem** (auto prefix + structured field `{ subsystem }`)
|
- **Sub-loggers by subsystem** (auto prefix + structured field `{ subsystem }`)
|
||||||
- **`logRaw()`** for QR/UX output (no prefix, no formatting)
|
- **`logRaw()`** for QR/UX output (no prefix, no formatting)
|
||||||
- **Console styles** (e.g. `pretty | compact | json`)
|
- **Console styles** (e.g. `pretty | compact | json`)
|
||||||
|
|||||||
@@ -370,6 +370,8 @@ const SUBSYSTEM_COLORS = [
|
|||||||
"magenta",
|
"magenta",
|
||||||
"red",
|
"red",
|
||||||
] as const;
|
] as const;
|
||||||
|
const SUBSYSTEM_PREFIXES_TO_DROP = ["gateway", "providers"] as const;
|
||||||
|
const SUBSYSTEM_MAX_SEGMENTS = 2;
|
||||||
|
|
||||||
function pickSubsystemColor(
|
function pickSubsystemColor(
|
||||||
color: ChalkInstance,
|
color: ChalkInstance,
|
||||||
@@ -384,6 +386,24 @@ function pickSubsystemColor(
|
|||||||
return color[name];
|
return color[name];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function formatSubsystemForConsole(subsystem: string): string {
|
||||||
|
const parts = subsystem.split("/").filter(Boolean);
|
||||||
|
const original = parts.join("/") || subsystem;
|
||||||
|
while (
|
||||||
|
parts.length > 0 &&
|
||||||
|
SUBSYSTEM_PREFIXES_TO_DROP.includes(
|
||||||
|
parts[0] as (typeof SUBSYSTEM_PREFIXES_TO_DROP)[number],
|
||||||
|
)
|
||||||
|
) {
|
||||||
|
parts.shift();
|
||||||
|
}
|
||||||
|
if (parts.length === 0) return original;
|
||||||
|
if (parts.length > SUBSYSTEM_MAX_SEGMENTS) {
|
||||||
|
return parts.slice(-SUBSYSTEM_MAX_SEGMENTS).join("/");
|
||||||
|
}
|
||||||
|
return parts.join("/");
|
||||||
|
}
|
||||||
|
|
||||||
function formatConsoleLine(opts: {
|
function formatConsoleLine(opts: {
|
||||||
level: Level;
|
level: Level;
|
||||||
subsystem: string;
|
subsystem: string;
|
||||||
@@ -391,18 +411,22 @@ function formatConsoleLine(opts: {
|
|||||||
style: ConsoleStyle;
|
style: ConsoleStyle;
|
||||||
meta?: Record<string, unknown>;
|
meta?: Record<string, unknown>;
|
||||||
}): string {
|
}): string {
|
||||||
|
const displaySubsystem =
|
||||||
|
opts.style === "json"
|
||||||
|
? opts.subsystem
|
||||||
|
: formatSubsystemForConsole(opts.subsystem);
|
||||||
if (opts.style === "json") {
|
if (opts.style === "json") {
|
||||||
return JSON.stringify({
|
return JSON.stringify({
|
||||||
time: new Date().toISOString(),
|
time: new Date().toISOString(),
|
||||||
level: opts.level,
|
level: opts.level,
|
||||||
subsystem: opts.subsystem,
|
subsystem: displaySubsystem,
|
||||||
message: opts.message,
|
message: opts.message,
|
||||||
...opts.meta,
|
...opts.meta,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
const color = getColorForConsole();
|
const color = getColorForConsole();
|
||||||
const prefix = `[${opts.subsystem}]`;
|
const prefix = `[${displaySubsystem}]`;
|
||||||
const prefixColor = pickSubsystemColor(color, opts.subsystem);
|
const prefixColor = pickSubsystemColor(color, displaySubsystem);
|
||||||
const levelColor =
|
const levelColor =
|
||||||
opts.level === "error" || opts.level === "fatal"
|
opts.level === "error" || opts.level === "fatal"
|
||||||
? color.red
|
? color.red
|
||||||
|
|||||||
Reference in New Issue
Block a user