@logickernel/logger 0.10.0 → 0.10.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +13 -13
- package/dist/index.cjs +2 -2
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -85,16 +85,16 @@ log.info(message: string, payload?: Record<string, unknown>, labels?: Record<str
|
|
|
85
85
|
|
|
86
86
|
### Severity methods
|
|
87
87
|
|
|
88
|
-
| Method | GCP severity | Console emoji |
|
|
89
|
-
|
|
90
|
-
| `debug` | `DEBUG` | 🐞 |
|
|
91
|
-
| `info` | `INFO` | ⚪️ |
|
|
92
|
-
| `notice` | `NOTICE` | 🔵 |
|
|
93
|
-
| `warning` | `WARNING` | 🟡 |
|
|
94
|
-
| `error` | `ERROR` | 🔴 |
|
|
95
|
-
| `critical` | `CRITICAL` | ⛔️ |
|
|
96
|
-
| `alert` | `ALERT` | ❗️ |
|
|
97
|
-
| `emergency` | `EMERGENCY` | 🚨 |
|
|
88
|
+
| Method | GCP severity | Console emoji | When to use |
|
|
89
|
+
|---|---|---|---|
|
|
90
|
+
| `debug` | `DEBUG` | 🐞 | Debug or trace information |
|
|
91
|
+
| `info` | `INFO` | ⚪️ | Routine information, such as ongoing status or performance |
|
|
92
|
+
| `notice` | `NOTICE` | 🔵 | Normal but significant events, such as start up, shut down, or a configuration change |
|
|
93
|
+
| `warning` | `WARNING` | 🟡 | Warning events that might cause problems |
|
|
94
|
+
| `error` | `ERROR` | 🔴 | Error events that are likely to cause problems |
|
|
95
|
+
| `critical` | `CRITICAL` | ⛔️ | Critical events that cause more severe problems or outages |
|
|
96
|
+
| `alert` | `ALERT` | ❗️ | A person must take an action immediately |
|
|
97
|
+
| `emergency` | `EMERGENCY` | 🚨 | One or more systems are unusable |
|
|
98
98
|
|
|
99
99
|
### Scope
|
|
100
100
|
|
|
@@ -133,13 +133,13 @@ By default, console logs are plain: `[(scope) ]message[ {payload}]` without emoj
|
|
|
133
133
|
When `LOGGER_CONSOLE_FORMAT=pretty`, console logs look like:
|
|
134
134
|
|
|
135
135
|
```
|
|
136
|
-
⚪️ 2026-02-26 13:04:22.120
|
|
137
|
-
🐞 2026-02-26 13:04:22.341
|
|
136
|
+
⚪️ 2026-02-26 13:04:22.120 server started
|
|
137
|
+
🐞 2026-02-26 13:04:22.341 (api) cache miss
|
|
138
138
|
{
|
|
139
139
|
"key": "user:42",
|
|
140
140
|
"ttl": 300
|
|
141
141
|
}
|
|
142
|
-
🟡 2026-02-26 13:04:22.512
|
|
142
|
+
🟡 2026-02-26 13:04:22.512 disk space low
|
|
143
143
|
{
|
|
144
144
|
"used": "92%",
|
|
145
145
|
"mount": "/data"
|
package/dist/index.cjs
CHANGED
|
@@ -48,8 +48,8 @@ function consoleLine(emoji, message, payload, scope) {
|
|
|
48
48
|
const d = /* @__PURE__ */ new Date();
|
|
49
49
|
const ts = d.toLocaleString("sv-SE") + "." + String(d.getMilliseconds()).padStart(3, "0");
|
|
50
50
|
const scopePart = scope ? `(${scope}) ` : "";
|
|
51
|
-
const suffix = payload ? "\n\x1B[
|
|
52
|
-
return `${emoji} \x1B[90m${ts}\x1B[0m
|
|
51
|
+
const suffix = payload ? "\n\x1B[2m" + JSON.stringify(payload, null, 2).replace(/^/gm, " ") + "\x1B[0m" : "";
|
|
52
|
+
return `${emoji} \x1B[90m${ts}\x1B[0m ${scopePart}${message}${suffix}`;
|
|
53
53
|
}
|
|
54
54
|
function consolePlain(message, payload, scope) {
|
|
55
55
|
const scopePart = scope ? `(${scope}) ` : "";
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts"],"sourcesContent":["import { Logging } from \"@google-cloud/logging\";\n\ntype LogMethod = (message: string, payload?: Record<string, unknown>, labels?: Record<string, string>) => void;\n\nexport interface Logger {\n debug: LogMethod;\n info: LogMethod;\n notice: LogMethod;\n warning: LogMethod;\n error: LogMethod;\n critical: LogMethod;\n alert: LogMethod;\n emergency: LogMethod;\n}\n\n// Resolved once at module load — no per-call branching.\n// LOGGER_TARGET accepts a comma-separated list of backends: \"gcp\", \"console\", or \"gcp,console\".\nconst rawTargets = process.env.LOGGER_TARGET;\nconst targets = rawTargets\n ? new Set(rawTargets.toLowerCase().split(\",\").map(s => s.trim()).filter(Boolean))\n : null;\n\nconst USE_GCP = targets ? targets.has(\"gcp\") : !!process.env.GCP_PROJECT;\nconst USE_CONSOLE = targets ? targets.has(\"console\") : !process.env.GCP_PROJECT;\nconst CONSOLE_PRETTY = process.env.LOGGER_CONSOLE_FORMAT?.toLowerCase() === \"pretty\";\nconst noop = (): void => {};\n\nconst envLabels: Record<string, string> = {};\nif (process.env.ENVIRONMENT) envLabels.environment = process.env.ENVIRONMENT;\nif (process.env.SERVICE_ID) envLabels.service_id = process.env.SERVICE_ID;\nif (process.env.VERSION) envLabels.version = process.env.VERSION;\n\n// GCP Log singleton — shared across all logger() calls.\nconst gcpLog = USE_GCP ? (() => {\n try {\n const logName = process.env.LOGGER_NAME ?? process.env.K_SERVICE ?? \"local\";\n return new Logging({ projectId: process.env.GCP_PROJECT }).log(logName);\n } catch {\n return null;\n }\n})() : null;\n\n// Formats a pretty console log line: \"{emoji} {local timestamp} [(scope) ]{message}[\\n {payload}]\"\nfunction consoleLine(emoji: string, message: string, payload?: Record<string, unknown>, scope?: string): string {\n const d = new Date();\n const ts = d.toLocaleString(\"sv-SE\") + \".\" + String(d.getMilliseconds()).padStart(3, \"0\");\n const scopePart = scope ? `(${scope}) ` : \"\";\n const suffix = payload ? \"\\n\\x1b[90m\" + JSON.stringify(payload, null, 2).replace(/^/gm, \" \") + \"\\x1b[0m\" : \"\";\n return `${emoji} \\x1b[90m${ts}\\x1b[0m ${scopePart}${message}${suffix}`;\n}\n\n// Plain console line: \"[(scope) ]{message}[ {payload}]\"\nfunction consolePlain(message: string, payload?: Record<string, unknown>, scope?: string): string {\n const scopePart = scope ? `(${scope}) ` : \"\";\n const suffix = payload ? \" \" + JSON.stringify(payload, null, 2).replace(/\\n\\s*/g, \" \") : \"\";\n return `${scopePart}${message}${suffix}`;\n}\n\nexport function logger(scope?: string): Logger {\n const instanceLabels: Record<string, string> = {\n ...envLabels,\n ...(scope ? { scope } : {}),\n };\n\n function resolveLabels(callLabels?: Record<string, string>): Record<string, string> | undefined {\n const merged = { ...instanceLabels, ...callLabels };\n return Object.keys(merged).length ? merged : undefined;\n }\n\n function gcpMeta(severity: string, callLabels?: Record<string, string>): Record<string, unknown> {\n const labels = resolveLabels(callLabels);\n return labels ? { severity, labels } : { severity };\n }\n\n function gcpData(message: string, payload?: Record<string, unknown>): string | Record<string, unknown> {\n return payload ? { message, ...payload } : message;\n }\n\n const backends: Logger[] = [];\n\n if (gcpLog) {\n const g = gcpLog;\n backends.push({\n debug: (message, payload, labels): void => { g.write(g.entry(gcpMeta(\"DEBUG\", labels), gcpData(message, payload))).catch(noop); },\n info: (message, payload, labels): void => { g.write(g.entry(gcpMeta(\"INFO\", labels), gcpData(message, payload))).catch(noop); },\n notice: (message, payload, labels): void => { g.write(g.entry(gcpMeta(\"NOTICE\", labels), gcpData(message, payload))).catch(noop); },\n warning: (message, payload, labels): void => { g.write(g.entry(gcpMeta(\"WARNING\", labels), gcpData(message, payload))).catch(noop); },\n error: (message, payload, labels): void => { g.write(g.entry(gcpMeta(\"ERROR\", labels), gcpData(message, payload))).catch(noop); },\n critical: (message, payload, labels): void => { g.write(g.entry(gcpMeta(\"CRITICAL\", labels), gcpData(message, payload))).catch(noop); },\n alert: (message, payload, labels): void => { g.write(g.entry(gcpMeta(\"ALERT\", labels), gcpData(message, payload))).catch(noop); },\n emergency: (message, payload, labels): void => { g.write(g.entry(gcpMeta(\"EMERGENCY\", labels), gcpData(message, payload))).catch(noop); },\n });\n }\n\n if (USE_CONSOLE || backends.length === 0) {\n backends.push(CONSOLE_PRETTY\n ? {\n debug: (message, payload): void => { console.log(consoleLine(\"🐞\", message, payload, scope)); },\n info: (message, payload): void => { console.log(consoleLine(\"⚪️\", message, payload, scope)); },\n notice: (message, payload): void => { console.log(consoleLine(\"🔵\", message, payload, scope)); },\n warning: (message, payload): void => { console.log(consoleLine(\"🟡\", message, payload, scope)); },\n error: (message, payload): void => { console.log(consoleLine(\"🔴\", message, payload, scope)); },\n critical: (message, payload): void => { console.log(consoleLine(\"⛔️\", message, payload, scope)); },\n alert: (message, payload): void => { console.log(consoleLine(\"❗️\", message, payload, scope)); },\n emergency: (message, payload): void => { console.log(consoleLine(\"🚨\", message, payload, scope)); },\n }\n : {\n debug: (message, payload): void => { console.log(consolePlain(message, payload, scope)); },\n info: (message, payload): void => { console.log(consolePlain(message, payload, scope)); },\n notice: (message, payload): void => { console.log(consolePlain(message, payload, scope)); },\n warning: (message, payload): void => { console.log(consolePlain(message, payload, scope)); },\n error: (message, payload): void => { console.log(consolePlain(message, payload, scope)); },\n critical: (message, payload): void => { console.log(consolePlain(message, payload, scope)); },\n alert: (message, payload): void => { console.log(consolePlain(message, payload, scope)); },\n emergency: (message, payload): void => { console.log(consolePlain(message, payload, scope)); },\n });\n }\n\n return backends.length === 1\n ? backends[0]\n : {\n debug: (message, payload, labels): void => { backends.forEach(b => b.debug(message, payload, labels)); },\n info: (message, payload, labels): void => { backends.forEach(b => b.info(message, payload, labels)); },\n notice: (message, payload, labels): void => { backends.forEach(b => b.notice(message, payload, labels)); },\n warning: (message, payload, labels): void => { backends.forEach(b => b.warning(message, payload, labels)); },\n error: (message, payload, labels): void => { backends.forEach(b => b.error(message, payload, labels)); },\n critical: (message, payload, labels): void => { backends.forEach(b => b.critical(message, payload, labels)); },\n alert: (message, payload, labels): void => { backends.forEach(b => b.alert(message, payload, labels)); },\n emergency: (message, payload, labels): void => { backends.forEach(b => b.emergency(message, payload, labels)); },\n };\n}\n\nexport default logger;\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts"],"sourcesContent":["import { Logging } from \"@google-cloud/logging\";\n\ntype LogMethod = (message: string, payload?: Record<string, unknown>, labels?: Record<string, string>) => void;\n\nexport interface Logger {\n debug: LogMethod;\n info: LogMethod;\n notice: LogMethod;\n warning: LogMethod;\n error: LogMethod;\n critical: LogMethod;\n alert: LogMethod;\n emergency: LogMethod;\n}\n\n// Resolved once at module load — no per-call branching.\n// LOGGER_TARGET accepts a comma-separated list of backends: \"gcp\", \"console\", or \"gcp,console\".\nconst rawTargets = process.env.LOGGER_TARGET;\nconst targets = rawTargets\n ? new Set(rawTargets.toLowerCase().split(\",\").map(s => s.trim()).filter(Boolean))\n : null;\n\nconst USE_GCP = targets ? targets.has(\"gcp\") : !!process.env.GCP_PROJECT;\nconst USE_CONSOLE = targets ? targets.has(\"console\") : !process.env.GCP_PROJECT;\nconst CONSOLE_PRETTY = process.env.LOGGER_CONSOLE_FORMAT?.toLowerCase() === \"pretty\";\nconst noop = (): void => {};\n\nconst envLabels: Record<string, string> = {};\nif (process.env.ENVIRONMENT) envLabels.environment = process.env.ENVIRONMENT;\nif (process.env.SERVICE_ID) envLabels.service_id = process.env.SERVICE_ID;\nif (process.env.VERSION) envLabels.version = process.env.VERSION;\n\n// GCP Log singleton — shared across all logger() calls.\nconst gcpLog = USE_GCP ? (() => {\n try {\n const logName = process.env.LOGGER_NAME ?? process.env.K_SERVICE ?? \"local\";\n return new Logging({ projectId: process.env.GCP_PROJECT }).log(logName);\n } catch {\n return null;\n }\n})() : null;\n\n// Formats a pretty console log line: \"{emoji} {local timestamp} [(scope) ]{message}[\\n {payload}]\"\nfunction consoleLine(emoji: string, message: string, payload?: Record<string, unknown>, scope?: string): string {\n const d = new Date();\n const ts = d.toLocaleString(\"sv-SE\") + \".\" + String(d.getMilliseconds()).padStart(3, \"0\");\n const scopePart = scope ? `(${scope}) ` : \"\";\n const suffix = payload ? \"\\n\\x1b[2m\" + JSON.stringify(payload, null, 2).replace(/^/gm, \" \") + \"\\x1b[0m\" : \"\";\n return `${emoji} \\x1b[90m${ts}\\x1b[0m ${scopePart}${message}${suffix}`;\n}\n\n// Plain console line: \"[(scope) ]{message}[ {payload}]\"\nfunction consolePlain(message: string, payload?: Record<string, unknown>, scope?: string): string {\n const scopePart = scope ? `(${scope}) ` : \"\";\n const suffix = payload ? \" \" + JSON.stringify(payload, null, 2).replace(/\\n\\s*/g, \" \") : \"\";\n return `${scopePart}${message}${suffix}`;\n}\n\nexport function logger(scope?: string): Logger {\n const instanceLabels: Record<string, string> = {\n ...envLabels,\n ...(scope ? { scope } : {}),\n };\n\n function resolveLabels(callLabels?: Record<string, string>): Record<string, string> | undefined {\n const merged = { ...instanceLabels, ...callLabels };\n return Object.keys(merged).length ? merged : undefined;\n }\n\n function gcpMeta(severity: string, callLabels?: Record<string, string>): Record<string, unknown> {\n const labels = resolveLabels(callLabels);\n return labels ? { severity, labels } : { severity };\n }\n\n function gcpData(message: string, payload?: Record<string, unknown>): string | Record<string, unknown> {\n return payload ? { message, ...payload } : message;\n }\n\n const backends: Logger[] = [];\n\n if (gcpLog) {\n const g = gcpLog;\n backends.push({\n debug: (message, payload, labels): void => { g.write(g.entry(gcpMeta(\"DEBUG\", labels), gcpData(message, payload))).catch(noop); },\n info: (message, payload, labels): void => { g.write(g.entry(gcpMeta(\"INFO\", labels), gcpData(message, payload))).catch(noop); },\n notice: (message, payload, labels): void => { g.write(g.entry(gcpMeta(\"NOTICE\", labels), gcpData(message, payload))).catch(noop); },\n warning: (message, payload, labels): void => { g.write(g.entry(gcpMeta(\"WARNING\", labels), gcpData(message, payload))).catch(noop); },\n error: (message, payload, labels): void => { g.write(g.entry(gcpMeta(\"ERROR\", labels), gcpData(message, payload))).catch(noop); },\n critical: (message, payload, labels): void => { g.write(g.entry(gcpMeta(\"CRITICAL\", labels), gcpData(message, payload))).catch(noop); },\n alert: (message, payload, labels): void => { g.write(g.entry(gcpMeta(\"ALERT\", labels), gcpData(message, payload))).catch(noop); },\n emergency: (message, payload, labels): void => { g.write(g.entry(gcpMeta(\"EMERGENCY\", labels), gcpData(message, payload))).catch(noop); },\n });\n }\n\n if (USE_CONSOLE || backends.length === 0) {\n backends.push(CONSOLE_PRETTY\n ? {\n debug: (message, payload): void => { console.log(consoleLine(\"🐞\", message, payload, scope)); },\n info: (message, payload): void => { console.log(consoleLine(\"⚪️\", message, payload, scope)); },\n notice: (message, payload): void => { console.log(consoleLine(\"🔵\", message, payload, scope)); },\n warning: (message, payload): void => { console.log(consoleLine(\"🟡\", message, payload, scope)); },\n error: (message, payload): void => { console.log(consoleLine(\"🔴\", message, payload, scope)); },\n critical: (message, payload): void => { console.log(consoleLine(\"⛔️\", message, payload, scope)); },\n alert: (message, payload): void => { console.log(consoleLine(\"❗️\", message, payload, scope)); },\n emergency: (message, payload): void => { console.log(consoleLine(\"🚨\", message, payload, scope)); },\n }\n : {\n debug: (message, payload): void => { console.log(consolePlain(message, payload, scope)); },\n info: (message, payload): void => { console.log(consolePlain(message, payload, scope)); },\n notice: (message, payload): void => { console.log(consolePlain(message, payload, scope)); },\n warning: (message, payload): void => { console.log(consolePlain(message, payload, scope)); },\n error: (message, payload): void => { console.log(consolePlain(message, payload, scope)); },\n critical: (message, payload): void => { console.log(consolePlain(message, payload, scope)); },\n alert: (message, payload): void => { console.log(consolePlain(message, payload, scope)); },\n emergency: (message, payload): void => { console.log(consolePlain(message, payload, scope)); },\n });\n }\n\n return backends.length === 1\n ? backends[0]\n : {\n debug: (message, payload, labels): void => { backends.forEach(b => b.debug(message, payload, labels)); },\n info: (message, payload, labels): void => { backends.forEach(b => b.info(message, payload, labels)); },\n notice: (message, payload, labels): void => { backends.forEach(b => b.notice(message, payload, labels)); },\n warning: (message, payload, labels): void => { backends.forEach(b => b.warning(message, payload, labels)); },\n error: (message, payload, labels): void => { backends.forEach(b => b.error(message, payload, labels)); },\n critical: (message, payload, labels): void => { backends.forEach(b => b.critical(message, payload, labels)); },\n alert: (message, payload, labels): void => { backends.forEach(b => b.alert(message, payload, labels)); },\n emergency: (message, payload, labels): void => { backends.forEach(b => b.emergency(message, payload, labels)); },\n };\n}\n\nexport default logger;\n"],"mappings":"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","names":[]}
|
package/dist/index.js
CHANGED
|
@@ -23,8 +23,8 @@ function consoleLine(emoji, message, payload, scope) {
|
|
|
23
23
|
const d = /* @__PURE__ */ new Date();
|
|
24
24
|
const ts = d.toLocaleString("sv-SE") + "." + String(d.getMilliseconds()).padStart(3, "0");
|
|
25
25
|
const scopePart = scope ? `(${scope}) ` : "";
|
|
26
|
-
const suffix = payload ? "\n\x1B[
|
|
27
|
-
return `${emoji} \x1B[90m${ts}\x1B[0m
|
|
26
|
+
const suffix = payload ? "\n\x1B[2m" + JSON.stringify(payload, null, 2).replace(/^/gm, " ") + "\x1B[0m" : "";
|
|
27
|
+
return `${emoji} \x1B[90m${ts}\x1B[0m ${scopePart}${message}${suffix}`;
|
|
28
28
|
}
|
|
29
29
|
function consolePlain(message, payload, scope) {
|
|
30
30
|
const scopePart = scope ? `(${scope}) ` : "";
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts"],"sourcesContent":["import { Logging } from \"@google-cloud/logging\";\n\ntype LogMethod = (message: string, payload?: Record<string, unknown>, labels?: Record<string, string>) => void;\n\nexport interface Logger {\n debug: LogMethod;\n info: LogMethod;\n notice: LogMethod;\n warning: LogMethod;\n error: LogMethod;\n critical: LogMethod;\n alert: LogMethod;\n emergency: LogMethod;\n}\n\n// Resolved once at module load — no per-call branching.\n// LOGGER_TARGET accepts a comma-separated list of backends: \"gcp\", \"console\", or \"gcp,console\".\nconst rawTargets = process.env.LOGGER_TARGET;\nconst targets = rawTargets\n ? new Set(rawTargets.toLowerCase().split(\",\").map(s => s.trim()).filter(Boolean))\n : null;\n\nconst USE_GCP = targets ? targets.has(\"gcp\") : !!process.env.GCP_PROJECT;\nconst USE_CONSOLE = targets ? targets.has(\"console\") : !process.env.GCP_PROJECT;\nconst CONSOLE_PRETTY = process.env.LOGGER_CONSOLE_FORMAT?.toLowerCase() === \"pretty\";\nconst noop = (): void => {};\n\nconst envLabels: Record<string, string> = {};\nif (process.env.ENVIRONMENT) envLabels.environment = process.env.ENVIRONMENT;\nif (process.env.SERVICE_ID) envLabels.service_id = process.env.SERVICE_ID;\nif (process.env.VERSION) envLabels.version = process.env.VERSION;\n\n// GCP Log singleton — shared across all logger() calls.\nconst gcpLog = USE_GCP ? (() => {\n try {\n const logName = process.env.LOGGER_NAME ?? process.env.K_SERVICE ?? \"local\";\n return new Logging({ projectId: process.env.GCP_PROJECT }).log(logName);\n } catch {\n return null;\n }\n})() : null;\n\n// Formats a pretty console log line: \"{emoji} {local timestamp} [(scope) ]{message}[\\n {payload}]\"\nfunction consoleLine(emoji: string, message: string, payload?: Record<string, unknown>, scope?: string): string {\n const d = new Date();\n const ts = d.toLocaleString(\"sv-SE\") + \".\" + String(d.getMilliseconds()).padStart(3, \"0\");\n const scopePart = scope ? `(${scope}) ` : \"\";\n const suffix = payload ? \"\\n\\x1b[90m\" + JSON.stringify(payload, null, 2).replace(/^/gm, \" \") + \"\\x1b[0m\" : \"\";\n return `${emoji} \\x1b[90m${ts}\\x1b[0m ${scopePart}${message}${suffix}`;\n}\n\n// Plain console line: \"[(scope) ]{message}[ {payload}]\"\nfunction consolePlain(message: string, payload?: Record<string, unknown>, scope?: string): string {\n const scopePart = scope ? `(${scope}) ` : \"\";\n const suffix = payload ? \" \" + JSON.stringify(payload, null, 2).replace(/\\n\\s*/g, \" \") : \"\";\n return `${scopePart}${message}${suffix}`;\n}\n\nexport function logger(scope?: string): Logger {\n const instanceLabels: Record<string, string> = {\n ...envLabels,\n ...(scope ? { scope } : {}),\n };\n\n function resolveLabels(callLabels?: Record<string, string>): Record<string, string> | undefined {\n const merged = { ...instanceLabels, ...callLabels };\n return Object.keys(merged).length ? merged : undefined;\n }\n\n function gcpMeta(severity: string, callLabels?: Record<string, string>): Record<string, unknown> {\n const labels = resolveLabels(callLabels);\n return labels ? { severity, labels } : { severity };\n }\n\n function gcpData(message: string, payload?: Record<string, unknown>): string | Record<string, unknown> {\n return payload ? { message, ...payload } : message;\n }\n\n const backends: Logger[] = [];\n\n if (gcpLog) {\n const g = gcpLog;\n backends.push({\n debug: (message, payload, labels): void => { g.write(g.entry(gcpMeta(\"DEBUG\", labels), gcpData(message, payload))).catch(noop); },\n info: (message, payload, labels): void => { g.write(g.entry(gcpMeta(\"INFO\", labels), gcpData(message, payload))).catch(noop); },\n notice: (message, payload, labels): void => { g.write(g.entry(gcpMeta(\"NOTICE\", labels), gcpData(message, payload))).catch(noop); },\n warning: (message, payload, labels): void => { g.write(g.entry(gcpMeta(\"WARNING\", labels), gcpData(message, payload))).catch(noop); },\n error: (message, payload, labels): void => { g.write(g.entry(gcpMeta(\"ERROR\", labels), gcpData(message, payload))).catch(noop); },\n critical: (message, payload, labels): void => { g.write(g.entry(gcpMeta(\"CRITICAL\", labels), gcpData(message, payload))).catch(noop); },\n alert: (message, payload, labels): void => { g.write(g.entry(gcpMeta(\"ALERT\", labels), gcpData(message, payload))).catch(noop); },\n emergency: (message, payload, labels): void => { g.write(g.entry(gcpMeta(\"EMERGENCY\", labels), gcpData(message, payload))).catch(noop); },\n });\n }\n\n if (USE_CONSOLE || backends.length === 0) {\n backends.push(CONSOLE_PRETTY\n ? {\n debug: (message, payload): void => { console.log(consoleLine(\"🐞\", message, payload, scope)); },\n info: (message, payload): void => { console.log(consoleLine(\"⚪️\", message, payload, scope)); },\n notice: (message, payload): void => { console.log(consoleLine(\"🔵\", message, payload, scope)); },\n warning: (message, payload): void => { console.log(consoleLine(\"🟡\", message, payload, scope)); },\n error: (message, payload): void => { console.log(consoleLine(\"🔴\", message, payload, scope)); },\n critical: (message, payload): void => { console.log(consoleLine(\"⛔️\", message, payload, scope)); },\n alert: (message, payload): void => { console.log(consoleLine(\"❗️\", message, payload, scope)); },\n emergency: (message, payload): void => { console.log(consoleLine(\"🚨\", message, payload, scope)); },\n }\n : {\n debug: (message, payload): void => { console.log(consolePlain(message, payload, scope)); },\n info: (message, payload): void => { console.log(consolePlain(message, payload, scope)); },\n notice: (message, payload): void => { console.log(consolePlain(message, payload, scope)); },\n warning: (message, payload): void => { console.log(consolePlain(message, payload, scope)); },\n error: (message, payload): void => { console.log(consolePlain(message, payload, scope)); },\n critical: (message, payload): void => { console.log(consolePlain(message, payload, scope)); },\n alert: (message, payload): void => { console.log(consolePlain(message, payload, scope)); },\n emergency: (message, payload): void => { console.log(consolePlain(message, payload, scope)); },\n });\n }\n\n return backends.length === 1\n ? backends[0]\n : {\n debug: (message, payload, labels): void => { backends.forEach(b => b.debug(message, payload, labels)); },\n info: (message, payload, labels): void => { backends.forEach(b => b.info(message, payload, labels)); },\n notice: (message, payload, labels): void => { backends.forEach(b => b.notice(message, payload, labels)); },\n warning: (message, payload, labels): void => { backends.forEach(b => b.warning(message, payload, labels)); },\n error: (message, payload, labels): void => { backends.forEach(b => b.error(message, payload, labels)); },\n critical: (message, payload, labels): void => { backends.forEach(b => b.critical(message, payload, labels)); },\n alert: (message, payload, labels): void => { backends.forEach(b => b.alert(message, payload, labels)); },\n emergency: (message, payload, labels): void => { backends.forEach(b => b.emergency(message, payload, labels)); },\n };\n}\n\nexport default logger;\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts"],"sourcesContent":["import { Logging } from \"@google-cloud/logging\";\n\ntype LogMethod = (message: string, payload?: Record<string, unknown>, labels?: Record<string, string>) => void;\n\nexport interface Logger {\n debug: LogMethod;\n info: LogMethod;\n notice: LogMethod;\n warning: LogMethod;\n error: LogMethod;\n critical: LogMethod;\n alert: LogMethod;\n emergency: LogMethod;\n}\n\n// Resolved once at module load — no per-call branching.\n// LOGGER_TARGET accepts a comma-separated list of backends: \"gcp\", \"console\", or \"gcp,console\".\nconst rawTargets = process.env.LOGGER_TARGET;\nconst targets = rawTargets\n ? new Set(rawTargets.toLowerCase().split(\",\").map(s => s.trim()).filter(Boolean))\n : null;\n\nconst USE_GCP = targets ? targets.has(\"gcp\") : !!process.env.GCP_PROJECT;\nconst USE_CONSOLE = targets ? targets.has(\"console\") : !process.env.GCP_PROJECT;\nconst CONSOLE_PRETTY = process.env.LOGGER_CONSOLE_FORMAT?.toLowerCase() === \"pretty\";\nconst noop = (): void => {};\n\nconst envLabels: Record<string, string> = {};\nif (process.env.ENVIRONMENT) envLabels.environment = process.env.ENVIRONMENT;\nif (process.env.SERVICE_ID) envLabels.service_id = process.env.SERVICE_ID;\nif (process.env.VERSION) envLabels.version = process.env.VERSION;\n\n// GCP Log singleton — shared across all logger() calls.\nconst gcpLog = USE_GCP ? (() => {\n try {\n const logName = process.env.LOGGER_NAME ?? process.env.K_SERVICE ?? \"local\";\n return new Logging({ projectId: process.env.GCP_PROJECT }).log(logName);\n } catch {\n return null;\n }\n})() : null;\n\n// Formats a pretty console log line: \"{emoji} {local timestamp} [(scope) ]{message}[\\n {payload}]\"\nfunction consoleLine(emoji: string, message: string, payload?: Record<string, unknown>, scope?: string): string {\n const d = new Date();\n const ts = d.toLocaleString(\"sv-SE\") + \".\" + String(d.getMilliseconds()).padStart(3, \"0\");\n const scopePart = scope ? `(${scope}) ` : \"\";\n const suffix = payload ? \"\\n\\x1b[2m\" + JSON.stringify(payload, null, 2).replace(/^/gm, \" \") + \"\\x1b[0m\" : \"\";\n return `${emoji} \\x1b[90m${ts}\\x1b[0m ${scopePart}${message}${suffix}`;\n}\n\n// Plain console line: \"[(scope) ]{message}[ {payload}]\"\nfunction consolePlain(message: string, payload?: Record<string, unknown>, scope?: string): string {\n const scopePart = scope ? `(${scope}) ` : \"\";\n const suffix = payload ? \" \" + JSON.stringify(payload, null, 2).replace(/\\n\\s*/g, \" \") : \"\";\n return `${scopePart}${message}${suffix}`;\n}\n\nexport function logger(scope?: string): Logger {\n const instanceLabels: Record<string, string> = {\n ...envLabels,\n ...(scope ? { scope } : {}),\n };\n\n function resolveLabels(callLabels?: Record<string, string>): Record<string, string> | undefined {\n const merged = { ...instanceLabels, ...callLabels };\n return Object.keys(merged).length ? merged : undefined;\n }\n\n function gcpMeta(severity: string, callLabels?: Record<string, string>): Record<string, unknown> {\n const labels = resolveLabels(callLabels);\n return labels ? { severity, labels } : { severity };\n }\n\n function gcpData(message: string, payload?: Record<string, unknown>): string | Record<string, unknown> {\n return payload ? { message, ...payload } : message;\n }\n\n const backends: Logger[] = [];\n\n if (gcpLog) {\n const g = gcpLog;\n backends.push({\n debug: (message, payload, labels): void => { g.write(g.entry(gcpMeta(\"DEBUG\", labels), gcpData(message, payload))).catch(noop); },\n info: (message, payload, labels): void => { g.write(g.entry(gcpMeta(\"INFO\", labels), gcpData(message, payload))).catch(noop); },\n notice: (message, payload, labels): void => { g.write(g.entry(gcpMeta(\"NOTICE\", labels), gcpData(message, payload))).catch(noop); },\n warning: (message, payload, labels): void => { g.write(g.entry(gcpMeta(\"WARNING\", labels), gcpData(message, payload))).catch(noop); },\n error: (message, payload, labels): void => { g.write(g.entry(gcpMeta(\"ERROR\", labels), gcpData(message, payload))).catch(noop); },\n critical: (message, payload, labels): void => { g.write(g.entry(gcpMeta(\"CRITICAL\", labels), gcpData(message, payload))).catch(noop); },\n alert: (message, payload, labels): void => { g.write(g.entry(gcpMeta(\"ALERT\", labels), gcpData(message, payload))).catch(noop); },\n emergency: (message, payload, labels): void => { g.write(g.entry(gcpMeta(\"EMERGENCY\", labels), gcpData(message, payload))).catch(noop); },\n });\n }\n\n if (USE_CONSOLE || backends.length === 0) {\n backends.push(CONSOLE_PRETTY\n ? {\n debug: (message, payload): void => { console.log(consoleLine(\"🐞\", message, payload, scope)); },\n info: (message, payload): void => { console.log(consoleLine(\"⚪️\", message, payload, scope)); },\n notice: (message, payload): void => { console.log(consoleLine(\"🔵\", message, payload, scope)); },\n warning: (message, payload): void => { console.log(consoleLine(\"🟡\", message, payload, scope)); },\n error: (message, payload): void => { console.log(consoleLine(\"🔴\", message, payload, scope)); },\n critical: (message, payload): void => { console.log(consoleLine(\"⛔️\", message, payload, scope)); },\n alert: (message, payload): void => { console.log(consoleLine(\"❗️\", message, payload, scope)); },\n emergency: (message, payload): void => { console.log(consoleLine(\"🚨\", message, payload, scope)); },\n }\n : {\n debug: (message, payload): void => { console.log(consolePlain(message, payload, scope)); },\n info: (message, payload): void => { console.log(consolePlain(message, payload, scope)); },\n notice: (message, payload): void => { console.log(consolePlain(message, payload, scope)); },\n warning: (message, payload): void => { console.log(consolePlain(message, payload, scope)); },\n error: (message, payload): void => { console.log(consolePlain(message, payload, scope)); },\n critical: (message, payload): void => { console.log(consolePlain(message, payload, scope)); },\n alert: (message, payload): void => { console.log(consolePlain(message, payload, scope)); },\n emergency: (message, payload): void => { console.log(consolePlain(message, payload, scope)); },\n });\n }\n\n return backends.length === 1\n ? backends[0]\n : {\n debug: (message, payload, labels): void => { backends.forEach(b => b.debug(message, payload, labels)); },\n info: (message, payload, labels): void => { backends.forEach(b => b.info(message, payload, labels)); },\n notice: (message, payload, labels): void => { backends.forEach(b => b.notice(message, payload, labels)); },\n warning: (message, payload, labels): void => { backends.forEach(b => b.warning(message, payload, labels)); },\n error: (message, payload, labels): void => { backends.forEach(b => b.error(message, payload, labels)); },\n critical: (message, payload, labels): void => { backends.forEach(b => b.critical(message, payload, labels)); },\n alert: (message, payload, labels): void => { backends.forEach(b => b.alert(message, payload, labels)); },\n emergency: (message, payload, labels): void => { backends.forEach(b => b.emergency(message, payload, labels)); },\n };\n}\n\nexport default logger;\n"],"mappings":"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","names":[]}
|