@logickernel/logger 0.6.1 → 0.7.0
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 -11
- package/dist/index.cjs +79 -54
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +79 -54
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -17,15 +17,17 @@ logger.warning("disk space low", { used: "92%", mount: "/data" });
|
|
|
17
17
|
|
|
18
18
|
## 1. Introduction
|
|
19
19
|
|
|
20
|
-
- **What it is**: A tiny logging helper with the full GCP severity ladder and a
|
|
21
|
-
- In **GCP** (or when `
|
|
22
|
-
-
|
|
20
|
+
- **What it is**: A tiny logging helper with the full GCP severity ladder and a configurable backend:
|
|
21
|
+
- In **GCP** (or when `LOGGER_TARGET=gcp`): writes to Google Cloud Logging with proper severities and structured `jsonPayload` when a context object is provided.
|
|
22
|
+
- On the **console**: writes with emoji prefixes, a local timestamp, and the context object inlined as compact JSON.
|
|
23
|
+
- **Both at once**: set `LOGGER_TARGET=gcp,console` to fan out to both.
|
|
23
24
|
- **Why it exists**: To avoid sprinkling environment-specific logging logic across your codebase. You import one `logger` and use it everywhere.
|
|
24
25
|
|
|
25
26
|
**Key features**
|
|
26
27
|
|
|
27
28
|
- **Zero config in GCP**: Uses `LOGGER_NAME` / `K_SERVICE` and `GCP_PROJECT` from the environment.
|
|
28
|
-
- **Auto backend selection**: GCP vs console decided once at module load
|
|
29
|
+
- **Auto backend selection**: GCP vs console decided once at module load; override with `LOGGER_TARGET`.
|
|
30
|
+
- **Multi-backend**: `LOGGER_TARGET` accepts a comma-separated list — `"gcp,console"` writes to both simultaneously.
|
|
29
31
|
- **Full severity ladder**: `debug`, `info`, `notice`, `warning`, `error`, `critical`, `alert`, `emergency`.
|
|
30
32
|
- **Structured context**: Pass a plain object as the last argument — it becomes a `jsonPayload` in GCP (queryable by field) and inline JSON in the console.
|
|
31
33
|
- **Tiny API**: One default export (`logger`) plus a `formatMessage` helper if you need it.
|
|
@@ -71,9 +73,9 @@ The default export is a **singleton** whose backend is chosen at module load:
|
|
|
71
73
|
| `info` | `INFO` | ⚪️ |
|
|
72
74
|
| `notice` | `NOTICE` | 🔵 |
|
|
73
75
|
| `warning` | `WARNING` | 🟡 |
|
|
74
|
-
| `error` | `ERROR` |
|
|
75
|
-
| `critical` | `CRITICAL` |
|
|
76
|
-
| `alert` | `ALERT` |
|
|
76
|
+
| `error` | `ERROR` | 🔴 |
|
|
77
|
+
| `critical` | `CRITICAL` | ⛔️ |
|
|
78
|
+
| `alert` | `ALERT` | ❗️ |
|
|
77
79
|
| `emergency` | `EMERGENCY` | 🚨 |
|
|
78
80
|
|
|
79
81
|
### Structured context
|
|
@@ -91,7 +93,7 @@ logger.info("request complete", { method: "GET", path: "/api/users", status: 200
|
|
|
91
93
|
|
|
92
94
|
By default, console logs are plain: `message [payload]` without emoji or timestamp.
|
|
93
95
|
|
|
94
|
-
When `
|
|
96
|
+
When `LOGGER_CONSOLE_FORMAT=pretty`, console logs look like:
|
|
95
97
|
|
|
96
98
|
```
|
|
97
99
|
⚪️ 2026-02-26 13:04:22.120 server started
|
|
@@ -109,10 +111,10 @@ This "pretty" format (emoji + local timestamp + message + optional payload) is m
|
|
|
109
111
|
- `LOGGER_NAME`
|
|
110
112
|
Log name in Google Cloud Logging. Falls back to `K_SERVICE`, then `"local"`.
|
|
111
113
|
|
|
112
|
-
- `LOGGER_TARGET`
|
|
113
|
-
|
|
114
|
+
- `LOGGER_TARGET`
|
|
115
|
+
Comma-separated list of backends to activate: `"gcp"`, `"console"`, or `"gcp,console"` for both simultaneously. When unset, GCP is used if `GCP_PROJECT` is set, otherwise console.
|
|
114
116
|
|
|
115
|
-
- `
|
|
117
|
+
- `LOGGER_CONSOLE_FORMAT`
|
|
116
118
|
Controls the console output format. When set to `"pretty"`, uses emoji + timestamp lines (mirroring the feel of GCP Logging's console UI); otherwise (default) prints plain `message [payload]` without emoji or timestamp.
|
|
117
119
|
|
|
118
120
|
- `K_SERVICE`
|
package/dist/index.cjs
CHANGED
|
@@ -38,12 +38,11 @@ ${arg.stack}` : "");
|
|
|
38
38
|
}
|
|
39
39
|
}).join(" ");
|
|
40
40
|
}
|
|
41
|
-
var
|
|
42
|
-
var
|
|
43
|
-
var
|
|
44
|
-
var
|
|
45
|
-
var
|
|
46
|
-
var CONSOLE_PRETTY = LOGGER_FORMAT === "pretty";
|
|
41
|
+
var rawTargets = process.env.LOGGER_TARGET;
|
|
42
|
+
var targets = rawTargets ? new Set(rawTargets.toLowerCase().split(",").map((s) => s.trim()).filter(Boolean)) : null;
|
|
43
|
+
var USE_GCP = targets ? targets.has("gcp") : !!process.env.GCP_PROJECT;
|
|
44
|
+
var USE_CONSOLE = targets ? targets.has("console") : !process.env.GCP_PROJECT;
|
|
45
|
+
var CONSOLE_PRETTY = process.env.LOGGER_CONSOLE_FORMAT?.toLowerCase() === "pretty";
|
|
47
46
|
var noop = () => {
|
|
48
47
|
};
|
|
49
48
|
var gcpLabels = {};
|
|
@@ -74,91 +73,117 @@ function gcpPayload(args) {
|
|
|
74
73
|
}
|
|
75
74
|
return formatMessage(args);
|
|
76
75
|
}
|
|
77
|
-
var
|
|
76
|
+
var backends = [];
|
|
78
77
|
if (USE_GCP) {
|
|
79
78
|
try {
|
|
80
79
|
const logName = process.env.LOGGER_NAME ?? process.env.K_SERVICE ?? "local";
|
|
81
|
-
|
|
80
|
+
const g = new import_logging.Logging({ projectId: process.env.GCP_PROJECT }).log(logName);
|
|
81
|
+
backends.push({
|
|
82
|
+
debug: (...args) => {
|
|
83
|
+
g.write(g.entry({ severity: "DEBUG", ...GCP_ENV_LABEL }, gcpPayload(args))).catch(noop);
|
|
84
|
+
},
|
|
85
|
+
info: (...args) => {
|
|
86
|
+
g.write(g.entry({ severity: "INFO", ...GCP_ENV_LABEL }, gcpPayload(args))).catch(noop);
|
|
87
|
+
},
|
|
88
|
+
notice: (...args) => {
|
|
89
|
+
g.write(g.entry({ severity: "NOTICE", ...GCP_ENV_LABEL }, gcpPayload(args))).catch(noop);
|
|
90
|
+
},
|
|
91
|
+
warning: (...args) => {
|
|
92
|
+
g.write(g.entry({ severity: "WARNING", ...GCP_ENV_LABEL }, gcpPayload(args))).catch(noop);
|
|
93
|
+
},
|
|
94
|
+
error: (...args) => {
|
|
95
|
+
g.write(g.entry({ severity: "ERROR", ...GCP_ENV_LABEL }, gcpPayload(args))).catch(noop);
|
|
96
|
+
},
|
|
97
|
+
critical: (...args) => {
|
|
98
|
+
g.write(g.entry({ severity: "CRITICAL", ...GCP_ENV_LABEL }, gcpPayload(args))).catch(noop);
|
|
99
|
+
},
|
|
100
|
+
alert: (...args) => {
|
|
101
|
+
g.write(g.entry({ severity: "ALERT", ...GCP_ENV_LABEL }, gcpPayload(args))).catch(noop);
|
|
102
|
+
},
|
|
103
|
+
emergency: (...args) => {
|
|
104
|
+
g.write(g.entry({ severity: "EMERGENCY", ...GCP_ENV_LABEL }, gcpPayload(args))).catch(noop);
|
|
105
|
+
}
|
|
106
|
+
});
|
|
82
107
|
} catch {
|
|
83
108
|
}
|
|
84
109
|
}
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
return {
|
|
110
|
+
if (USE_CONSOLE || backends.length === 0) {
|
|
111
|
+
backends.push(CONSOLE_PRETTY ? {
|
|
88
112
|
debug: (...args) => {
|
|
89
|
-
|
|
113
|
+
console.log(consoleLine("\u{1F41E}", args));
|
|
90
114
|
},
|
|
91
115
|
info: (...args) => {
|
|
92
|
-
|
|
116
|
+
console.log(consoleLine("\u26AA\uFE0F", args));
|
|
93
117
|
},
|
|
94
118
|
notice: (...args) => {
|
|
95
|
-
|
|
119
|
+
console.log(consoleLine("\u{1F535}", args));
|
|
96
120
|
},
|
|
97
121
|
warning: (...args) => {
|
|
98
|
-
|
|
122
|
+
console.log(consoleLine("\u{1F7E1}", args));
|
|
99
123
|
},
|
|
100
124
|
error: (...args) => {
|
|
101
|
-
|
|
125
|
+
console.log(consoleLine("\u{1F534}", args));
|
|
102
126
|
},
|
|
103
127
|
critical: (...args) => {
|
|
104
|
-
|
|
128
|
+
console.log(consoleLine("\u26D4\uFE0F", args));
|
|
105
129
|
},
|
|
106
130
|
alert: (...args) => {
|
|
107
|
-
|
|
131
|
+
console.log(consoleLine("\u2757\uFE0F", args));
|
|
108
132
|
},
|
|
109
133
|
emergency: (...args) => {
|
|
110
|
-
|
|
134
|
+
console.log(consoleLine("\u{1F6A8}", args));
|
|
111
135
|
}
|
|
112
|
-
}
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
}
|
|
138
|
-
}
|
|
136
|
+
} : {
|
|
137
|
+
debug: (...args) => {
|
|
138
|
+
console.log(consolePlain(args));
|
|
139
|
+
},
|
|
140
|
+
info: (...args) => {
|
|
141
|
+
console.log(consolePlain(args));
|
|
142
|
+
},
|
|
143
|
+
notice: (...args) => {
|
|
144
|
+
console.log(consolePlain(args));
|
|
145
|
+
},
|
|
146
|
+
warning: (...args) => {
|
|
147
|
+
console.log(consolePlain(args));
|
|
148
|
+
},
|
|
149
|
+
error: (...args) => {
|
|
150
|
+
console.log(consolePlain(args));
|
|
151
|
+
},
|
|
152
|
+
critical: (...args) => {
|
|
153
|
+
console.log(consolePlain(args));
|
|
154
|
+
},
|
|
155
|
+
alert: (...args) => {
|
|
156
|
+
console.log(consolePlain(args));
|
|
157
|
+
},
|
|
158
|
+
emergency: (...args) => {
|
|
159
|
+
console.log(consolePlain(args));
|
|
160
|
+
}
|
|
161
|
+
});
|
|
162
|
+
}
|
|
163
|
+
var logger = backends.length === 1 ? backends[0] : {
|
|
139
164
|
debug: (...args) => {
|
|
140
|
-
|
|
165
|
+
backends.forEach((b) => b.debug(...args));
|
|
141
166
|
},
|
|
142
167
|
info: (...args) => {
|
|
143
|
-
|
|
168
|
+
backends.forEach((b) => b.info(...args));
|
|
144
169
|
},
|
|
145
170
|
notice: (...args) => {
|
|
146
|
-
|
|
171
|
+
backends.forEach((b) => b.notice(...args));
|
|
147
172
|
},
|
|
148
173
|
warning: (...args) => {
|
|
149
|
-
|
|
174
|
+
backends.forEach((b) => b.warning(...args));
|
|
150
175
|
},
|
|
151
176
|
error: (...args) => {
|
|
152
|
-
|
|
177
|
+
backends.forEach((b) => b.error(...args));
|
|
153
178
|
},
|
|
154
179
|
critical: (...args) => {
|
|
155
|
-
|
|
180
|
+
backends.forEach((b) => b.critical(...args));
|
|
156
181
|
},
|
|
157
182
|
alert: (...args) => {
|
|
158
|
-
|
|
183
|
+
backends.forEach((b) => b.alert(...args));
|
|
159
184
|
},
|
|
160
185
|
emergency: (...args) => {
|
|
161
|
-
|
|
186
|
+
backends.forEach((b) => b.emergency(...args));
|
|
162
187
|
}
|
|
163
188
|
};
|
|
164
189
|
var index_default = logger;
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts"],"sourcesContent":["import { Logging } from \"@google-cloud/logging\";\n\nexport interface Logger {\n debug: (...args: unknown[]) => void;\n info: (...args: unknown[]) => void;\n notice: (...args: unknown[]) => void;\n warning: (...args: unknown[]) => void;\n error: (...args: unknown[]) => void;\n critical: (...args: unknown[]) => void;\n alert: (...args: unknown[]) => void;\n emergency: (...args: unknown[]) => void;\n}\n\nexport function formatMessage(args: unknown[]): string {\n return args.map(arg => {\n if (typeof arg === \"string\") return arg;\n if (arg instanceof Error) return arg.message + (arg.stack ? `\\n${arg.stack}` : \"\");\n try {\n return JSON.stringify(arg);\n } catch {\n return String(arg);\n }\n }).join(\" \");\n}\n\n// Resolved once at module load — no per-call branching.\nconst LOGGER_TARGET = process.env.LOGGER_TARGET?.toLowerCase();\nconst LOGGER_FORMAT = process.env.LOGGER_FORMAT?.toLowerCase();\nconst FORCE_GCP = LOGGER_TARGET === \"gcp\";\nconst FORCE_CONSOLE = LOGGER_TARGET === \"console\";\nconst USE_GCP = !FORCE_CONSOLE && (FORCE_GCP || !!process.env.GCP_PROJECT);\nconst CONSOLE_PRETTY = LOGGER_FORMAT === \"pretty\";\nconst noop = (): void => {};\nconst gcpLabels: Record<string, string> = {};\nif (process.env.ENVIRONMENT) gcpLabels.environment = process.env.ENVIRONMENT;\nif (process.env.SERVICE_ID) gcpLabels.service_id = process.env.SERVICE_ID;\nif (process.env.VERSION) gcpLabels.version = process.env.VERSION;\nconst GCP_ENV_LABEL = Object.keys(gcpLabels).length ? { labels: gcpLabels } : {};\n\n// Formats a single console log line: \"{emoji} {local timestamp} {message} [{payload}]\"\nfunction consoleLine(emoji: string, args: unknown[]): string {\n const d = new Date();\n const ts = d.toLocaleString(\"sv-SE\") + \".\" + String(d.getMilliseconds()).padStart(3, \"0\");\n const last = args[args.length - 1];\n const hasPayload = args.length >= 2 && last !== null && typeof last === \"object\" && !Array.isArray(last) && !(last instanceof Error);\n const msg = formatMessage(hasPayload ? args.slice(0, -1) : args);\n const suffix = hasPayload ? \" \" + JSON.stringify(last, null, 2).replace(/\\n\\s*/g, \" \") : \"\";\n return `${emoji} ${ts} ${msg}${suffix}`;\n}\n\n// Plain console line: \"message [{payload}]\"\nfunction consolePlain(args: unknown[]): string {\n const last = args[args.length - 1];\n const hasPayload =\n args.length >= 2 &&\n last !== null &&\n typeof last === \"object\" &&\n !Array.isArray(last) &&\n !(last instanceof Error);\n const msg = formatMessage(hasPayload ? args.slice(0, -1) : args);\n const suffix = hasPayload ? \" \" + JSON.stringify(last, null, 2).replace(/\\n\\s*/g, \" \") : \"\";\n return `${msg}${suffix}`;\n}\n\n// If the last arg is a plain object, return a jsonPayload so Cloud Logging\n// indexes its fields. Otherwise return a plain string (textPayload).\nfunction gcpPayload(args: unknown[]): string | Record<string, unknown> {\n const last = args[args.length - 1];\n if (\n args.length >= 2 &&\n last !== null &&\n typeof last === \"object\" &&\n !Array.isArray(last) &&\n !(last instanceof Error)\n ) {\n return { message: formatMessage(args.slice(0, -1)), ...(last as Record<string, unknown>) };\n }\n return formatMessage(args);\n}\n\nlet gcpLog: ReturnType<Logging[\"log\"]> | null = null;\nif (USE_GCP) {\n try {\n const logName = process.env.LOGGER_NAME ?? process.env.K_SERVICE ?? \"local\";\n gcpLog = new Logging({ projectId: process.env.GCP_PROJECT }).log(logName);\n } catch {\n // GCP init failed; fall back to console\n }\n}\n\nexport const logger: Logger = gcpLog\n ? (() => {\n const g = gcpLog!;\n return {\n debug: (...args: unknown[]): void => {\n g.write(g.entry({ severity: \"DEBUG\", ...GCP_ENV_LABEL }, gcpPayload(args))).catch(noop);\n },\n info: (...args: unknown[]): void => {\n g.write(g.entry({ severity: \"INFO\", ...GCP_ENV_LABEL }, gcpPayload(args))).catch(noop);\n },\n notice: (...args: unknown[]): void => {\n g.write(g.entry({ severity: \"NOTICE\", ...GCP_ENV_LABEL }, gcpPayload(args))).catch(noop);\n },\n warning: (...args: unknown[]): void => {\n g.write(g.entry({ severity: \"WARNING\", ...GCP_ENV_LABEL }, gcpPayload(args))).catch(noop);\n },\n error: (...args: unknown[]): void => {\n g.write(g.entry({ severity: \"ERROR\", ...GCP_ENV_LABEL }, gcpPayload(args))).catch(noop);\n },\n critical: (...args: unknown[]): void => {\n g.write(g.entry({ severity: \"CRITICAL\", ...GCP_ENV_LABEL }, gcpPayload(args))).catch(noop);\n },\n alert: (...args: unknown[]): void => {\n g.write(g.entry({ severity: \"ALERT\", ...GCP_ENV_LABEL }, gcpPayload(args))).catch(noop);\n },\n emergency: (...args: unknown[]): void => {\n g.write(g.entry({ severity: \"EMERGENCY\", ...GCP_ENV_LABEL }, gcpPayload(args))).catch(noop);\n },\n };\n })()\n : CONSOLE_PRETTY\n ? {\n debug: (...args: unknown[]): void => { console.log(consoleLine(\"🐞\", args)); },\n info: (...args: unknown[]): void => { console.log(consoleLine(\"⚪️\", args)); },\n notice: (...args: unknown[]): void => { console.log(consoleLine(\"🔵\", args)); },\n warning: (...args: unknown[]): void => { console.log(consoleLine(\"🟡\", args)); },\n error: (...args: unknown[]): void => { console.log(consoleLine(\"🔴\", args)); },\n critical: (...args: unknown[]): void => { console.log(consoleLine(\"⛔️\", args)); },\n alert: (...args: unknown[]): void => { console.log(consoleLine(\"❗️\", args)); },\n emergency: (...args: unknown[]): void => { console.log(consoleLine(\"🚨\", args)); },\n }\n : {\n debug: (...args: unknown[]): void => { console.log(consolePlain(args)); },\n info: (...args: unknown[]): void => { console.log(consolePlain(args)); },\n notice: (...args: unknown[]): void => { console.log(consolePlain(args)); },\n warning: (...args: unknown[]): void => { console.log(consolePlain(args)); },\n error: (...args: unknown[]): void => { console.log(consolePlain(args)); },\n critical: (...args: unknown[]): void => { console.log(consolePlain(args)); },\n alert: (...args: unknown[]): void => { console.log(consolePlain(args)); },\n emergency: (...args: unknown[]): void => { console.log(consolePlain(args)); },\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\nexport interface Logger {\n debug: (...args: unknown[]) => void;\n info: (...args: unknown[]) => void;\n notice: (...args: unknown[]) => void;\n warning: (...args: unknown[]) => void;\n error: (...args: unknown[]) => void;\n critical: (...args: unknown[]) => void;\n alert: (...args: unknown[]) => void;\n emergency: (...args: unknown[]) => void;\n}\n\nexport function formatMessage(args: unknown[]): string {\n return args.map(arg => {\n if (typeof arg === \"string\") return arg;\n if (arg instanceof Error) return arg.message + (arg.stack ? `\\n${arg.stack}` : \"\");\n try {\n return JSON.stringify(arg);\n } catch {\n return String(arg);\n }\n }).join(\" \");\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 => {};\nconst gcpLabels: Record<string, string> = {};\nif (process.env.ENVIRONMENT) gcpLabels.environment = process.env.ENVIRONMENT;\nif (process.env.SERVICE_ID) gcpLabels.service_id = process.env.SERVICE_ID;\nif (process.env.VERSION) gcpLabels.version = process.env.VERSION;\nconst GCP_ENV_LABEL = Object.keys(gcpLabels).length ? { labels: gcpLabels } : {};\n\n// Formats a single console log line: \"{emoji} {local timestamp} {message} [{payload}]\"\nfunction consoleLine(emoji: string, args: unknown[]): string {\n const d = new Date();\n const ts = d.toLocaleString(\"sv-SE\") + \".\" + String(d.getMilliseconds()).padStart(3, \"0\");\n const last = args[args.length - 1];\n const hasPayload = args.length >= 2 && last !== null && typeof last === \"object\" && !Array.isArray(last) && !(last instanceof Error);\n const msg = formatMessage(hasPayload ? args.slice(0, -1) : args);\n const suffix = hasPayload ? \" \" + JSON.stringify(last, null, 2).replace(/\\n\\s*/g, \" \") : \"\";\n return `${emoji} ${ts} ${msg}${suffix}`;\n}\n\n// Plain console line: \"message [{payload}]\"\nfunction consolePlain(args: unknown[]): string {\n const last = args[args.length - 1];\n const hasPayload =\n args.length >= 2 &&\n last !== null &&\n typeof last === \"object\" &&\n !Array.isArray(last) &&\n !(last instanceof Error);\n const msg = formatMessage(hasPayload ? args.slice(0, -1) : args);\n const suffix = hasPayload ? \" \" + JSON.stringify(last, null, 2).replace(/\\n\\s*/g, \" \") : \"\";\n return `${msg}${suffix}`;\n}\n\n// If the last arg is a plain object, return a jsonPayload so Cloud Logging\n// indexes its fields. Otherwise return a plain string (textPayload).\nfunction gcpPayload(args: unknown[]): string | Record<string, unknown> {\n const last = args[args.length - 1];\n if (\n args.length >= 2 &&\n last !== null &&\n typeof last === \"object\" &&\n !Array.isArray(last) &&\n !(last instanceof Error)\n ) {\n return { message: formatMessage(args.slice(0, -1)), ...(last as Record<string, unknown>) };\n }\n return formatMessage(args);\n}\n\nconst backends: Logger[] = [];\n\nif (USE_GCP) {\n try {\n const logName = process.env.LOGGER_NAME ?? process.env.K_SERVICE ?? \"local\";\n const g = new Logging({ projectId: process.env.GCP_PROJECT }).log(logName);\n backends.push({\n debug: (...args: unknown[]): void => { g.write(g.entry({ severity: \"DEBUG\", ...GCP_ENV_LABEL }, gcpPayload(args))).catch(noop); },\n info: (...args: unknown[]): void => { g.write(g.entry({ severity: \"INFO\", ...GCP_ENV_LABEL }, gcpPayload(args))).catch(noop); },\n notice: (...args: unknown[]): void => { g.write(g.entry({ severity: \"NOTICE\", ...GCP_ENV_LABEL }, gcpPayload(args))).catch(noop); },\n warning: (...args: unknown[]): void => { g.write(g.entry({ severity: \"WARNING\", ...GCP_ENV_LABEL }, gcpPayload(args))).catch(noop); },\n error: (...args: unknown[]): void => { g.write(g.entry({ severity: \"ERROR\", ...GCP_ENV_LABEL }, gcpPayload(args))).catch(noop); },\n critical: (...args: unknown[]): void => { g.write(g.entry({ severity: \"CRITICAL\", ...GCP_ENV_LABEL }, gcpPayload(args))).catch(noop); },\n alert: (...args: unknown[]): void => { g.write(g.entry({ severity: \"ALERT\", ...GCP_ENV_LABEL }, gcpPayload(args))).catch(noop); },\n emergency: (...args: unknown[]): void => { g.write(g.entry({ severity: \"EMERGENCY\", ...GCP_ENV_LABEL }, gcpPayload(args))).catch(noop); },\n });\n } catch {\n // GCP init failed; will fall back to console\n }\n}\n\nif (USE_CONSOLE || backends.length === 0) {\n backends.push(CONSOLE_PRETTY\n ? {\n debug: (...args: unknown[]): void => { console.log(consoleLine(\"🐞\", args)); },\n info: (...args: unknown[]): void => { console.log(consoleLine(\"⚪️\", args)); },\n notice: (...args: unknown[]): void => { console.log(consoleLine(\"🔵\", args)); },\n warning: (...args: unknown[]): void => { console.log(consoleLine(\"🟡\", args)); },\n error: (...args: unknown[]): void => { console.log(consoleLine(\"🔴\", args)); },\n critical: (...args: unknown[]): void => { console.log(consoleLine(\"⛔️\", args)); },\n alert: (...args: unknown[]): void => { console.log(consoleLine(\"❗️\", args)); },\n emergency: (...args: unknown[]): void => { console.log(consoleLine(\"🚨\", args)); },\n }\n : {\n debug: (...args: unknown[]): void => { console.log(consolePlain(args)); },\n info: (...args: unknown[]): void => { console.log(consolePlain(args)); },\n notice: (...args: unknown[]): void => { console.log(consolePlain(args)); },\n warning: (...args: unknown[]): void => { console.log(consolePlain(args)); },\n error: (...args: unknown[]): void => { console.log(consolePlain(args)); },\n critical: (...args: unknown[]): void => { console.log(consolePlain(args)); },\n alert: (...args: unknown[]): void => { console.log(consolePlain(args)); },\n emergency: (...args: unknown[]): void => { console.log(consolePlain(args)); },\n });\n}\n\nexport const logger: Logger =\n backends.length === 1\n ? backends[0]\n : {\n debug: (...args: unknown[]): void => { backends.forEach(b => b.debug(...args)); },\n info: (...args: unknown[]): void => { backends.forEach(b => b.info(...args)); },\n notice: (...args: unknown[]): void => { backends.forEach(b => b.notice(...args)); },\n warning: (...args: unknown[]): void => { backends.forEach(b => b.warning(...args)); },\n error: (...args: unknown[]): void => { backends.forEach(b => b.error(...args)); },\n critical: (...args: unknown[]): void => { backends.forEach(b => b.critical(...args)); },\n alert: (...args: unknown[]): void => { backends.forEach(b => b.alert(...args)); },\n emergency: (...args: unknown[]): void => { backends.forEach(b => b.emergency(...args)); },\n };\n\nexport default logger;\n"],"mappings":"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","names":[]}
|
package/dist/index.js
CHANGED
|
@@ -12,12 +12,11 @@ ${arg.stack}` : "");
|
|
|
12
12
|
}
|
|
13
13
|
}).join(" ");
|
|
14
14
|
}
|
|
15
|
-
var
|
|
16
|
-
var
|
|
17
|
-
var
|
|
18
|
-
var
|
|
19
|
-
var
|
|
20
|
-
var CONSOLE_PRETTY = LOGGER_FORMAT === "pretty";
|
|
15
|
+
var rawTargets = process.env.LOGGER_TARGET;
|
|
16
|
+
var targets = rawTargets ? new Set(rawTargets.toLowerCase().split(",").map((s) => s.trim()).filter(Boolean)) : null;
|
|
17
|
+
var USE_GCP = targets ? targets.has("gcp") : !!process.env.GCP_PROJECT;
|
|
18
|
+
var USE_CONSOLE = targets ? targets.has("console") : !process.env.GCP_PROJECT;
|
|
19
|
+
var CONSOLE_PRETTY = process.env.LOGGER_CONSOLE_FORMAT?.toLowerCase() === "pretty";
|
|
21
20
|
var noop = () => {
|
|
22
21
|
};
|
|
23
22
|
var gcpLabels = {};
|
|
@@ -48,91 +47,117 @@ function gcpPayload(args) {
|
|
|
48
47
|
}
|
|
49
48
|
return formatMessage(args);
|
|
50
49
|
}
|
|
51
|
-
var
|
|
50
|
+
var backends = [];
|
|
52
51
|
if (USE_GCP) {
|
|
53
52
|
try {
|
|
54
53
|
const logName = process.env.LOGGER_NAME ?? process.env.K_SERVICE ?? "local";
|
|
55
|
-
|
|
54
|
+
const g = new Logging({ projectId: process.env.GCP_PROJECT }).log(logName);
|
|
55
|
+
backends.push({
|
|
56
|
+
debug: (...args) => {
|
|
57
|
+
g.write(g.entry({ severity: "DEBUG", ...GCP_ENV_LABEL }, gcpPayload(args))).catch(noop);
|
|
58
|
+
},
|
|
59
|
+
info: (...args) => {
|
|
60
|
+
g.write(g.entry({ severity: "INFO", ...GCP_ENV_LABEL }, gcpPayload(args))).catch(noop);
|
|
61
|
+
},
|
|
62
|
+
notice: (...args) => {
|
|
63
|
+
g.write(g.entry({ severity: "NOTICE", ...GCP_ENV_LABEL }, gcpPayload(args))).catch(noop);
|
|
64
|
+
},
|
|
65
|
+
warning: (...args) => {
|
|
66
|
+
g.write(g.entry({ severity: "WARNING", ...GCP_ENV_LABEL }, gcpPayload(args))).catch(noop);
|
|
67
|
+
},
|
|
68
|
+
error: (...args) => {
|
|
69
|
+
g.write(g.entry({ severity: "ERROR", ...GCP_ENV_LABEL }, gcpPayload(args))).catch(noop);
|
|
70
|
+
},
|
|
71
|
+
critical: (...args) => {
|
|
72
|
+
g.write(g.entry({ severity: "CRITICAL", ...GCP_ENV_LABEL }, gcpPayload(args))).catch(noop);
|
|
73
|
+
},
|
|
74
|
+
alert: (...args) => {
|
|
75
|
+
g.write(g.entry({ severity: "ALERT", ...GCP_ENV_LABEL }, gcpPayload(args))).catch(noop);
|
|
76
|
+
},
|
|
77
|
+
emergency: (...args) => {
|
|
78
|
+
g.write(g.entry({ severity: "EMERGENCY", ...GCP_ENV_LABEL }, gcpPayload(args))).catch(noop);
|
|
79
|
+
}
|
|
80
|
+
});
|
|
56
81
|
} catch {
|
|
57
82
|
}
|
|
58
83
|
}
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
return {
|
|
84
|
+
if (USE_CONSOLE || backends.length === 0) {
|
|
85
|
+
backends.push(CONSOLE_PRETTY ? {
|
|
62
86
|
debug: (...args) => {
|
|
63
|
-
|
|
87
|
+
console.log(consoleLine("\u{1F41E}", args));
|
|
64
88
|
},
|
|
65
89
|
info: (...args) => {
|
|
66
|
-
|
|
90
|
+
console.log(consoleLine("\u26AA\uFE0F", args));
|
|
67
91
|
},
|
|
68
92
|
notice: (...args) => {
|
|
69
|
-
|
|
93
|
+
console.log(consoleLine("\u{1F535}", args));
|
|
70
94
|
},
|
|
71
95
|
warning: (...args) => {
|
|
72
|
-
|
|
96
|
+
console.log(consoleLine("\u{1F7E1}", args));
|
|
73
97
|
},
|
|
74
98
|
error: (...args) => {
|
|
75
|
-
|
|
99
|
+
console.log(consoleLine("\u{1F534}", args));
|
|
76
100
|
},
|
|
77
101
|
critical: (...args) => {
|
|
78
|
-
|
|
102
|
+
console.log(consoleLine("\u26D4\uFE0F", args));
|
|
79
103
|
},
|
|
80
104
|
alert: (...args) => {
|
|
81
|
-
|
|
105
|
+
console.log(consoleLine("\u2757\uFE0F", args));
|
|
82
106
|
},
|
|
83
107
|
emergency: (...args) => {
|
|
84
|
-
|
|
108
|
+
console.log(consoleLine("\u{1F6A8}", args));
|
|
85
109
|
}
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
}
|
|
112
|
-
}
|
|
110
|
+
} : {
|
|
111
|
+
debug: (...args) => {
|
|
112
|
+
console.log(consolePlain(args));
|
|
113
|
+
},
|
|
114
|
+
info: (...args) => {
|
|
115
|
+
console.log(consolePlain(args));
|
|
116
|
+
},
|
|
117
|
+
notice: (...args) => {
|
|
118
|
+
console.log(consolePlain(args));
|
|
119
|
+
},
|
|
120
|
+
warning: (...args) => {
|
|
121
|
+
console.log(consolePlain(args));
|
|
122
|
+
},
|
|
123
|
+
error: (...args) => {
|
|
124
|
+
console.log(consolePlain(args));
|
|
125
|
+
},
|
|
126
|
+
critical: (...args) => {
|
|
127
|
+
console.log(consolePlain(args));
|
|
128
|
+
},
|
|
129
|
+
alert: (...args) => {
|
|
130
|
+
console.log(consolePlain(args));
|
|
131
|
+
},
|
|
132
|
+
emergency: (...args) => {
|
|
133
|
+
console.log(consolePlain(args));
|
|
134
|
+
}
|
|
135
|
+
});
|
|
136
|
+
}
|
|
137
|
+
var logger = backends.length === 1 ? backends[0] : {
|
|
113
138
|
debug: (...args) => {
|
|
114
|
-
|
|
139
|
+
backends.forEach((b) => b.debug(...args));
|
|
115
140
|
},
|
|
116
141
|
info: (...args) => {
|
|
117
|
-
|
|
142
|
+
backends.forEach((b) => b.info(...args));
|
|
118
143
|
},
|
|
119
144
|
notice: (...args) => {
|
|
120
|
-
|
|
145
|
+
backends.forEach((b) => b.notice(...args));
|
|
121
146
|
},
|
|
122
147
|
warning: (...args) => {
|
|
123
|
-
|
|
148
|
+
backends.forEach((b) => b.warning(...args));
|
|
124
149
|
},
|
|
125
150
|
error: (...args) => {
|
|
126
|
-
|
|
151
|
+
backends.forEach((b) => b.error(...args));
|
|
127
152
|
},
|
|
128
153
|
critical: (...args) => {
|
|
129
|
-
|
|
154
|
+
backends.forEach((b) => b.critical(...args));
|
|
130
155
|
},
|
|
131
156
|
alert: (...args) => {
|
|
132
|
-
|
|
157
|
+
backends.forEach((b) => b.alert(...args));
|
|
133
158
|
},
|
|
134
159
|
emergency: (...args) => {
|
|
135
|
-
|
|
160
|
+
backends.forEach((b) => b.emergency(...args));
|
|
136
161
|
}
|
|
137
162
|
};
|
|
138
163
|
var index_default = logger;
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts"],"sourcesContent":["import { Logging } from \"@google-cloud/logging\";\n\nexport interface Logger {\n debug: (...args: unknown[]) => void;\n info: (...args: unknown[]) => void;\n notice: (...args: unknown[]) => void;\n warning: (...args: unknown[]) => void;\n error: (...args: unknown[]) => void;\n critical: (...args: unknown[]) => void;\n alert: (...args: unknown[]) => void;\n emergency: (...args: unknown[]) => void;\n}\n\nexport function formatMessage(args: unknown[]): string {\n return args.map(arg => {\n if (typeof arg === \"string\") return arg;\n if (arg instanceof Error) return arg.message + (arg.stack ? `\\n${arg.stack}` : \"\");\n try {\n return JSON.stringify(arg);\n } catch {\n return String(arg);\n }\n }).join(\" \");\n}\n\n// Resolved once at module load — no per-call branching.\nconst LOGGER_TARGET = process.env.LOGGER_TARGET?.toLowerCase();\nconst LOGGER_FORMAT = process.env.LOGGER_FORMAT?.toLowerCase();\nconst FORCE_GCP = LOGGER_TARGET === \"gcp\";\nconst FORCE_CONSOLE = LOGGER_TARGET === \"console\";\nconst USE_GCP = !FORCE_CONSOLE && (FORCE_GCP || !!process.env.GCP_PROJECT);\nconst CONSOLE_PRETTY = LOGGER_FORMAT === \"pretty\";\nconst noop = (): void => {};\nconst gcpLabels: Record<string, string> = {};\nif (process.env.ENVIRONMENT) gcpLabels.environment = process.env.ENVIRONMENT;\nif (process.env.SERVICE_ID) gcpLabels.service_id = process.env.SERVICE_ID;\nif (process.env.VERSION) gcpLabels.version = process.env.VERSION;\nconst GCP_ENV_LABEL = Object.keys(gcpLabels).length ? { labels: gcpLabels } : {};\n\n// Formats a single console log line: \"{emoji} {local timestamp} {message} [{payload}]\"\nfunction consoleLine(emoji: string, args: unknown[]): string {\n const d = new Date();\n const ts = d.toLocaleString(\"sv-SE\") + \".\" + String(d.getMilliseconds()).padStart(3, \"0\");\n const last = args[args.length - 1];\n const hasPayload = args.length >= 2 && last !== null && typeof last === \"object\" && !Array.isArray(last) && !(last instanceof Error);\n const msg = formatMessage(hasPayload ? args.slice(0, -1) : args);\n const suffix = hasPayload ? \" \" + JSON.stringify(last, null, 2).replace(/\\n\\s*/g, \" \") : \"\";\n return `${emoji} ${ts} ${msg}${suffix}`;\n}\n\n// Plain console line: \"message [{payload}]\"\nfunction consolePlain(args: unknown[]): string {\n const last = args[args.length - 1];\n const hasPayload =\n args.length >= 2 &&\n last !== null &&\n typeof last === \"object\" &&\n !Array.isArray(last) &&\n !(last instanceof Error);\n const msg = formatMessage(hasPayload ? args.slice(0, -1) : args);\n const suffix = hasPayload ? \" \" + JSON.stringify(last, null, 2).replace(/\\n\\s*/g, \" \") : \"\";\n return `${msg}${suffix}`;\n}\n\n// If the last arg is a plain object, return a jsonPayload so Cloud Logging\n// indexes its fields. Otherwise return a plain string (textPayload).\nfunction gcpPayload(args: unknown[]): string | Record<string, unknown> {\n const last = args[args.length - 1];\n if (\n args.length >= 2 &&\n last !== null &&\n typeof last === \"object\" &&\n !Array.isArray(last) &&\n !(last instanceof Error)\n ) {\n return { message: formatMessage(args.slice(0, -1)), ...(last as Record<string, unknown>) };\n }\n return formatMessage(args);\n}\n\nlet gcpLog: ReturnType<Logging[\"log\"]> | null = null;\nif (USE_GCP) {\n try {\n const logName = process.env.LOGGER_NAME ?? process.env.K_SERVICE ?? \"local\";\n gcpLog = new Logging({ projectId: process.env.GCP_PROJECT }).log(logName);\n } catch {\n // GCP init failed; fall back to console\n }\n}\n\nexport const logger: Logger = gcpLog\n ? (() => {\n const g = gcpLog!;\n return {\n debug: (...args: unknown[]): void => {\n g.write(g.entry({ severity: \"DEBUG\", ...GCP_ENV_LABEL }, gcpPayload(args))).catch(noop);\n },\n info: (...args: unknown[]): void => {\n g.write(g.entry({ severity: \"INFO\", ...GCP_ENV_LABEL }, gcpPayload(args))).catch(noop);\n },\n notice: (...args: unknown[]): void => {\n g.write(g.entry({ severity: \"NOTICE\", ...GCP_ENV_LABEL }, gcpPayload(args))).catch(noop);\n },\n warning: (...args: unknown[]): void => {\n g.write(g.entry({ severity: \"WARNING\", ...GCP_ENV_LABEL }, gcpPayload(args))).catch(noop);\n },\n error: (...args: unknown[]): void => {\n g.write(g.entry({ severity: \"ERROR\", ...GCP_ENV_LABEL }, gcpPayload(args))).catch(noop);\n },\n critical: (...args: unknown[]): void => {\n g.write(g.entry({ severity: \"CRITICAL\", ...GCP_ENV_LABEL }, gcpPayload(args))).catch(noop);\n },\n alert: (...args: unknown[]): void => {\n g.write(g.entry({ severity: \"ALERT\", ...GCP_ENV_LABEL }, gcpPayload(args))).catch(noop);\n },\n emergency: (...args: unknown[]): void => {\n g.write(g.entry({ severity: \"EMERGENCY\", ...GCP_ENV_LABEL }, gcpPayload(args))).catch(noop);\n },\n };\n })()\n : CONSOLE_PRETTY\n ? {\n debug: (...args: unknown[]): void => { console.log(consoleLine(\"🐞\", args)); },\n info: (...args: unknown[]): void => { console.log(consoleLine(\"⚪️\", args)); },\n notice: (...args: unknown[]): void => { console.log(consoleLine(\"🔵\", args)); },\n warning: (...args: unknown[]): void => { console.log(consoleLine(\"🟡\", args)); },\n error: (...args: unknown[]): void => { console.log(consoleLine(\"🔴\", args)); },\n critical: (...args: unknown[]): void => { console.log(consoleLine(\"⛔️\", args)); },\n alert: (...args: unknown[]): void => { console.log(consoleLine(\"❗️\", args)); },\n emergency: (...args: unknown[]): void => { console.log(consoleLine(\"🚨\", args)); },\n }\n : {\n debug: (...args: unknown[]): void => { console.log(consolePlain(args)); },\n info: (...args: unknown[]): void => { console.log(consolePlain(args)); },\n notice: (...args: unknown[]): void => { console.log(consolePlain(args)); },\n warning: (...args: unknown[]): void => { console.log(consolePlain(args)); },\n error: (...args: unknown[]): void => { console.log(consolePlain(args)); },\n critical: (...args: unknown[]): void => { console.log(consolePlain(args)); },\n alert: (...args: unknown[]): void => { console.log(consolePlain(args)); },\n emergency: (...args: unknown[]): void => { console.log(consolePlain(args)); },\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\nexport interface Logger {\n debug: (...args: unknown[]) => void;\n info: (...args: unknown[]) => void;\n notice: (...args: unknown[]) => void;\n warning: (...args: unknown[]) => void;\n error: (...args: unknown[]) => void;\n critical: (...args: unknown[]) => void;\n alert: (...args: unknown[]) => void;\n emergency: (...args: unknown[]) => void;\n}\n\nexport function formatMessage(args: unknown[]): string {\n return args.map(arg => {\n if (typeof arg === \"string\") return arg;\n if (arg instanceof Error) return arg.message + (arg.stack ? `\\n${arg.stack}` : \"\");\n try {\n return JSON.stringify(arg);\n } catch {\n return String(arg);\n }\n }).join(\" \");\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 => {};\nconst gcpLabels: Record<string, string> = {};\nif (process.env.ENVIRONMENT) gcpLabels.environment = process.env.ENVIRONMENT;\nif (process.env.SERVICE_ID) gcpLabels.service_id = process.env.SERVICE_ID;\nif (process.env.VERSION) gcpLabels.version = process.env.VERSION;\nconst GCP_ENV_LABEL = Object.keys(gcpLabels).length ? { labels: gcpLabels } : {};\n\n// Formats a single console log line: \"{emoji} {local timestamp} {message} [{payload}]\"\nfunction consoleLine(emoji: string, args: unknown[]): string {\n const d = new Date();\n const ts = d.toLocaleString(\"sv-SE\") + \".\" + String(d.getMilliseconds()).padStart(3, \"0\");\n const last = args[args.length - 1];\n const hasPayload = args.length >= 2 && last !== null && typeof last === \"object\" && !Array.isArray(last) && !(last instanceof Error);\n const msg = formatMessage(hasPayload ? args.slice(0, -1) : args);\n const suffix = hasPayload ? \" \" + JSON.stringify(last, null, 2).replace(/\\n\\s*/g, \" \") : \"\";\n return `${emoji} ${ts} ${msg}${suffix}`;\n}\n\n// Plain console line: \"message [{payload}]\"\nfunction consolePlain(args: unknown[]): string {\n const last = args[args.length - 1];\n const hasPayload =\n args.length >= 2 &&\n last !== null &&\n typeof last === \"object\" &&\n !Array.isArray(last) &&\n !(last instanceof Error);\n const msg = formatMessage(hasPayload ? args.slice(0, -1) : args);\n const suffix = hasPayload ? \" \" + JSON.stringify(last, null, 2).replace(/\\n\\s*/g, \" \") : \"\";\n return `${msg}${suffix}`;\n}\n\n// If the last arg is a plain object, return a jsonPayload so Cloud Logging\n// indexes its fields. Otherwise return a plain string (textPayload).\nfunction gcpPayload(args: unknown[]): string | Record<string, unknown> {\n const last = args[args.length - 1];\n if (\n args.length >= 2 &&\n last !== null &&\n typeof last === \"object\" &&\n !Array.isArray(last) &&\n !(last instanceof Error)\n ) {\n return { message: formatMessage(args.slice(0, -1)), ...(last as Record<string, unknown>) };\n }\n return formatMessage(args);\n}\n\nconst backends: Logger[] = [];\n\nif (USE_GCP) {\n try {\n const logName = process.env.LOGGER_NAME ?? process.env.K_SERVICE ?? \"local\";\n const g = new Logging({ projectId: process.env.GCP_PROJECT }).log(logName);\n backends.push({\n debug: (...args: unknown[]): void => { g.write(g.entry({ severity: \"DEBUG\", ...GCP_ENV_LABEL }, gcpPayload(args))).catch(noop); },\n info: (...args: unknown[]): void => { g.write(g.entry({ severity: \"INFO\", ...GCP_ENV_LABEL }, gcpPayload(args))).catch(noop); },\n notice: (...args: unknown[]): void => { g.write(g.entry({ severity: \"NOTICE\", ...GCP_ENV_LABEL }, gcpPayload(args))).catch(noop); },\n warning: (...args: unknown[]): void => { g.write(g.entry({ severity: \"WARNING\", ...GCP_ENV_LABEL }, gcpPayload(args))).catch(noop); },\n error: (...args: unknown[]): void => { g.write(g.entry({ severity: \"ERROR\", ...GCP_ENV_LABEL }, gcpPayload(args))).catch(noop); },\n critical: (...args: unknown[]): void => { g.write(g.entry({ severity: \"CRITICAL\", ...GCP_ENV_LABEL }, gcpPayload(args))).catch(noop); },\n alert: (...args: unknown[]): void => { g.write(g.entry({ severity: \"ALERT\", ...GCP_ENV_LABEL }, gcpPayload(args))).catch(noop); },\n emergency: (...args: unknown[]): void => { g.write(g.entry({ severity: \"EMERGENCY\", ...GCP_ENV_LABEL }, gcpPayload(args))).catch(noop); },\n });\n } catch {\n // GCP init failed; will fall back to console\n }\n}\n\nif (USE_CONSOLE || backends.length === 0) {\n backends.push(CONSOLE_PRETTY\n ? {\n debug: (...args: unknown[]): void => { console.log(consoleLine(\"🐞\", args)); },\n info: (...args: unknown[]): void => { console.log(consoleLine(\"⚪️\", args)); },\n notice: (...args: unknown[]): void => { console.log(consoleLine(\"🔵\", args)); },\n warning: (...args: unknown[]): void => { console.log(consoleLine(\"🟡\", args)); },\n error: (...args: unknown[]): void => { console.log(consoleLine(\"🔴\", args)); },\n critical: (...args: unknown[]): void => { console.log(consoleLine(\"⛔️\", args)); },\n alert: (...args: unknown[]): void => { console.log(consoleLine(\"❗️\", args)); },\n emergency: (...args: unknown[]): void => { console.log(consoleLine(\"🚨\", args)); },\n }\n : {\n debug: (...args: unknown[]): void => { console.log(consolePlain(args)); },\n info: (...args: unknown[]): void => { console.log(consolePlain(args)); },\n notice: (...args: unknown[]): void => { console.log(consolePlain(args)); },\n warning: (...args: unknown[]): void => { console.log(consolePlain(args)); },\n error: (...args: unknown[]): void => { console.log(consolePlain(args)); },\n critical: (...args: unknown[]): void => { console.log(consolePlain(args)); },\n alert: (...args: unknown[]): void => { console.log(consolePlain(args)); },\n emergency: (...args: unknown[]): void => { console.log(consolePlain(args)); },\n });\n}\n\nexport const logger: Logger =\n backends.length === 1\n ? backends[0]\n : {\n debug: (...args: unknown[]): void => { backends.forEach(b => b.debug(...args)); },\n info: (...args: unknown[]): void => { backends.forEach(b => b.info(...args)); },\n notice: (...args: unknown[]): void => { backends.forEach(b => b.notice(...args)); },\n warning: (...args: unknown[]): void => { backends.forEach(b => b.warning(...args)); },\n error: (...args: unknown[]): void => { backends.forEach(b => b.error(...args)); },\n critical: (...args: unknown[]): void => { backends.forEach(b => b.critical(...args)); },\n alert: (...args: unknown[]): void => { backends.forEach(b => b.alert(...args)); },\n emergency: (...args: unknown[]): void => { backends.forEach(b => b.emergency(...args)); },\n };\n\nexport default logger;\n"],"mappings":";AAAA,SAAS,eAAe;AAajB,SAAS,cAAc,MAAyB;AACrD,SAAO,KAAK,IAAI,SAAO;AACrB,QAAI,OAAO,QAAQ,SAAU,QAAO;AACpC,QAAI,eAAe,MAAO,QAAO,IAAI,WAAW,IAAI,QAAQ;AAAA,EAAK,IAAI,KAAK,KAAK;AAC/E,QAAI;AACF,aAAO,KAAK,UAAU,GAAG;AAAA,IAC3B,QAAQ;AACN,aAAO,OAAO,GAAG;AAAA,IACnB;AAAA,EACF,CAAC,EAAE,KAAK,GAAG;AACb;AAIA,IAAM,aAAa,QAAQ,IAAI;AAC/B,IAAM,UAAU,aACZ,IAAI,IAAI,WAAW,YAAY,EAAE,MAAM,GAAG,EAAE,IAAI,OAAK,EAAE,KAAK,CAAC,EAAE,OAAO,OAAO,CAAC,IAC9E;AAEJ,IAAM,UAAc,UAAU,QAAQ,IAAI,KAAK,IAAO,CAAC,CAAC,QAAQ,IAAI;AACpE,IAAM,cAAc,UAAU,QAAQ,IAAI,SAAS,IAAI,CAAC,QAAQ,IAAI;AACpE,IAAM,iBAAiB,QAAQ,IAAI,uBAAuB,YAAY,MAAM;AAC5E,IAAM,OAAO,MAAY;AAAC;AAC1B,IAAM,YAAoC,CAAC;AAC3C,IAAI,QAAQ,IAAI,YAAa,WAAU,cAAc,QAAQ,IAAI;AACjE,IAAI,QAAQ,IAAI,WAAa,WAAU,aAAc,QAAQ,IAAI;AACjE,IAAI,QAAQ,IAAI,QAAa,WAAU,UAAe,QAAQ,IAAI;AAClE,IAAM,gBAAgB,OAAO,KAAK,SAAS,EAAE,SAAS,EAAE,QAAQ,UAAU,IAAI,CAAC;AAG/E,SAAS,YAAY,OAAe,MAAyB;AAC3D,QAAM,IAAI,oBAAI,KAAK;AACnB,QAAM,KAAK,EAAE,eAAe,OAAO,IAAI,MAAM,OAAO,EAAE,gBAAgB,CAAC,EAAE,SAAS,GAAG,GAAG;AACxF,QAAM,OAAO,KAAK,KAAK,SAAS,CAAC;AACjC,QAAM,aAAa,KAAK,UAAU,KAAK,SAAS,QAAQ,OAAO,SAAS,YAAY,CAAC,MAAM,QAAQ,IAAI,KAAK,EAAE,gBAAgB;AAC9H,QAAM,MAAM,cAAc,aAAa,KAAK,MAAM,GAAG,EAAE,IAAI,IAAI;AAC/D,QAAM,SAAS,aAAa,MAAM,KAAK,UAAU,MAAM,MAAM,CAAC,EAAE,QAAQ,UAAU,GAAG,IAAI;AACzF,SAAO,GAAG,KAAK,IAAI,EAAE,IAAI,GAAG,GAAG,MAAM;AACvC;AAGA,SAAS,aAAa,MAAyB;AAC7C,QAAM,OAAO,KAAK,KAAK,SAAS,CAAC;AACjC,QAAM,aACJ,KAAK,UAAU,KACf,SAAS,QACT,OAAO,SAAS,YAChB,CAAC,MAAM,QAAQ,IAAI,KACnB,EAAE,gBAAgB;AACpB,QAAM,MAAM,cAAc,aAAa,KAAK,MAAM,GAAG,EAAE,IAAI,IAAI;AAC/D,QAAM,SAAS,aAAa,MAAM,KAAK,UAAU,MAAM,MAAM,CAAC,EAAE,QAAQ,UAAU,GAAG,IAAI;AACzF,SAAO,GAAG,GAAG,GAAG,MAAM;AACxB;AAIA,SAAS,WAAW,MAAmD;AACrE,QAAM,OAAO,KAAK,KAAK,SAAS,CAAC;AACjC,MACE,KAAK,UAAU,KACf,SAAS,QACT,OAAO,SAAS,YAChB,CAAC,MAAM,QAAQ,IAAI,KACnB,EAAE,gBAAgB,QAClB;AACA,WAAO,EAAE,SAAS,cAAc,KAAK,MAAM,GAAG,EAAE,CAAC,GAAG,GAAI,KAAiC;AAAA,EAC3F;AACA,SAAO,cAAc,IAAI;AAC3B;AAEA,IAAM,WAAqB,CAAC;AAE5B,IAAI,SAAS;AACX,MAAI;AACF,UAAM,UAAU,QAAQ,IAAI,eAAe,QAAQ,IAAI,aAAa;AACpE,UAAM,IAAI,IAAI,QAAQ,EAAE,WAAW,QAAQ,IAAI,YAAY,CAAC,EAAE,IAAI,OAAO;AACzE,aAAS,KAAK;AAAA,MACZ,OAAW,IAAI,SAA0B;AAAE,UAAE,MAAM,EAAE,MAAM,EAAE,UAAU,SAAa,GAAG,cAAc,GAAG,WAAW,IAAI,CAAC,CAAC,EAAE,MAAM,IAAI;AAAA,MAAG;AAAA,MACxI,MAAW,IAAI,SAA0B;AAAE,UAAE,MAAM,EAAE,MAAM,EAAE,UAAU,QAAa,GAAG,cAAc,GAAG,WAAW,IAAI,CAAC,CAAC,EAAE,MAAM,IAAI;AAAA,MAAG;AAAA,MACxI,QAAW,IAAI,SAA0B;AAAE,UAAE,MAAM,EAAE,MAAM,EAAE,UAAU,UAAa,GAAG,cAAc,GAAG,WAAW,IAAI,CAAC,CAAC,EAAE,MAAM,IAAI;AAAA,MAAG;AAAA,MACxI,SAAW,IAAI,SAA0B;AAAE,UAAE,MAAM,EAAE,MAAM,EAAE,UAAU,WAAa,GAAG,cAAc,GAAG,WAAW,IAAI,CAAC,CAAC,EAAE,MAAM,IAAI;AAAA,MAAG;AAAA,MACxI,OAAW,IAAI,SAA0B;AAAE,UAAE,MAAM,EAAE,MAAM,EAAE,UAAU,SAAa,GAAG,cAAc,GAAG,WAAW,IAAI,CAAC,CAAC,EAAE,MAAM,IAAI;AAAA,MAAG;AAAA,MACxI,UAAW,IAAI,SAA0B;AAAE,UAAE,MAAM,EAAE,MAAM,EAAE,UAAU,YAAa,GAAG,cAAc,GAAG,WAAW,IAAI,CAAC,CAAC,EAAE,MAAM,IAAI;AAAA,MAAG;AAAA,MACxI,OAAW,IAAI,SAA0B;AAAE,UAAE,MAAM,EAAE,MAAM,EAAE,UAAU,SAAa,GAAG,cAAc,GAAG,WAAW,IAAI,CAAC,CAAC,EAAE,MAAM,IAAI;AAAA,MAAG;AAAA,MACxI,WAAW,IAAI,SAA0B;AAAE,UAAE,MAAM,EAAE,MAAM,EAAE,UAAU,aAAa,GAAG,cAAc,GAAG,WAAW,IAAI,CAAC,CAAC,EAAE,MAAM,IAAI;AAAA,MAAG;AAAA,IAC1I,CAAC;AAAA,EACH,QAAQ;AAAA,EAER;AACF;AAEA,IAAI,eAAe,SAAS,WAAW,GAAG;AACxC,WAAS,KAAK,iBACV;AAAA,IACE,OAAW,IAAI,SAA0B;AAAE,cAAQ,IAAI,YAAY,aAAM,IAAI,CAAC;AAAA,IAAG;AAAA,IACjF,MAAW,IAAI,SAA0B;AAAE,cAAQ,IAAI,YAAY,gBAAM,IAAI,CAAC;AAAA,IAAG;AAAA,IACjF,QAAW,IAAI,SAA0B;AAAE,cAAQ,IAAI,YAAY,aAAM,IAAI,CAAC;AAAA,IAAG;AAAA,IACjF,SAAW,IAAI,SAA0B;AAAE,cAAQ,IAAI,YAAY,aAAM,IAAI,CAAC;AAAA,IAAG;AAAA,IACjF,OAAW,IAAI,SAA0B;AAAE,cAAQ,IAAI,YAAY,aAAM,IAAI,CAAC;AAAA,IAAG;AAAA,IACjF,UAAW,IAAI,SAA0B;AAAE,cAAQ,IAAI,YAAY,gBAAM,IAAI,CAAC;AAAA,IAAG;AAAA,IACjF,OAAW,IAAI,SAA0B;AAAE,cAAQ,IAAI,YAAY,gBAAM,IAAI,CAAC;AAAA,IAAG;AAAA,IACjF,WAAW,IAAI,SAA0B;AAAE,cAAQ,IAAI,YAAY,aAAM,IAAI,CAAC;AAAA,IAAG;AAAA,EACnF,IACA;AAAA,IACE,OAAW,IAAI,SAA0B;AAAE,cAAQ,IAAI,aAAa,IAAI,CAAC;AAAA,IAAG;AAAA,IAC5E,MAAW,IAAI,SAA0B;AAAE,cAAQ,IAAI,aAAa,IAAI,CAAC;AAAA,IAAG;AAAA,IAC5E,QAAW,IAAI,SAA0B;AAAE,cAAQ,IAAI,aAAa,IAAI,CAAC;AAAA,IAAG;AAAA,IAC5E,SAAW,IAAI,SAA0B;AAAE,cAAQ,IAAI,aAAa,IAAI,CAAC;AAAA,IAAG;AAAA,IAC5E,OAAW,IAAI,SAA0B;AAAE,cAAQ,IAAI,aAAa,IAAI,CAAC;AAAA,IAAG;AAAA,IAC5E,UAAW,IAAI,SAA0B;AAAE,cAAQ,IAAI,aAAa,IAAI,CAAC;AAAA,IAAG;AAAA,IAC5E,OAAW,IAAI,SAA0B;AAAE,cAAQ,IAAI,aAAa,IAAI,CAAC;AAAA,IAAG;AAAA,IAC5E,WAAW,IAAI,SAA0B;AAAE,cAAQ,IAAI,aAAa,IAAI,CAAC;AAAA,IAAG;AAAA,EAC9E,CAAC;AACP;AAEO,IAAM,SACX,SAAS,WAAW,IAChB,SAAS,CAAC,IACV;AAAA,EACE,OAAW,IAAI,SAA0B;AAAE,aAAS,QAAQ,OAAK,EAAE,MAAM,GAAG,IAAI,CAAC;AAAA,EAAO;AAAA,EACxF,MAAW,IAAI,SAA0B;AAAE,aAAS,QAAQ,OAAK,EAAE,KAAK,GAAG,IAAI,CAAC;AAAA,EAAQ;AAAA,EACxF,QAAW,IAAI,SAA0B;AAAE,aAAS,QAAQ,OAAK,EAAE,OAAO,GAAG,IAAI,CAAC;AAAA,EAAM;AAAA,EACxF,SAAW,IAAI,SAA0B;AAAE,aAAS,QAAQ,OAAK,EAAE,QAAQ,GAAG,IAAI,CAAC;AAAA,EAAK;AAAA,EACxF,OAAW,IAAI,SAA0B;AAAE,aAAS,QAAQ,OAAK,EAAE,MAAM,GAAG,IAAI,CAAC;AAAA,EAAO;AAAA,EACxF,UAAW,IAAI,SAA0B;AAAE,aAAS,QAAQ,OAAK,EAAE,SAAS,GAAG,IAAI,CAAC;AAAA,EAAI;AAAA,EACxF,OAAW,IAAI,SAA0B;AAAE,aAAS,QAAQ,OAAK,EAAE,MAAM,GAAG,IAAI,CAAC;AAAA,EAAO;AAAA,EACxF,WAAW,IAAI,SAA0B;AAAE,aAAS,QAAQ,OAAK,EAAE,UAAU,GAAG,IAAI,CAAC;AAAA,EAAG;AAC1F;AAEN,IAAO,gBAAQ;","names":[]}
|