@logickernel/logger 0.5.1 β 0.6.1
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 +26 -11
- package/dist/index.cjs +53 -15
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +53 -15
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -24,7 +24,7 @@ logger.warning("disk space low", { used: "92%", mount: "/data" });
|
|
|
24
24
|
|
|
25
25
|
**Key features**
|
|
26
26
|
|
|
27
|
-
- **Zero config in GCP**: Uses `K_SERVICE` and `GCP_PROJECT` from the environment.
|
|
27
|
+
- **Zero config in GCP**: Uses `LOGGER_NAME` / `K_SERVICE` and `GCP_PROJECT` from the environment.
|
|
28
28
|
- **Auto backend selection**: GCP vs console decided once at module load.
|
|
29
29
|
- **Full severity ladder**: `debug`, `info`, `notice`, `warning`, `error`, `critical`, `alert`, `emergency`.
|
|
30
30
|
- **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.
|
|
@@ -68,12 +68,12 @@ The default export is a **singleton** whose backend is chosen at module load:
|
|
|
68
68
|
| Method | GCP severity | Console emoji |
|
|
69
69
|
|---|---|---|
|
|
70
70
|
| `debug` | `DEBUG` | π |
|
|
71
|
-
| `info` | `INFO` |
|
|
72
|
-
| `notice` | `NOTICE` |
|
|
73
|
-
| `warning` | `WARNING` |
|
|
71
|
+
| `info` | `INFO` | βͺοΈ |
|
|
72
|
+
| `notice` | `NOTICE` | π΅ |
|
|
73
|
+
| `warning` | `WARNING` | π‘ |
|
|
74
74
|
| `error` | `ERROR` | βοΈ |
|
|
75
75
|
| `critical` | `CRITICAL` | βοΈ |
|
|
76
|
-
| `alert` | `ALERT` |
|
|
76
|
+
| `alert` | `ALERT` | π΄ |
|
|
77
77
|
| `emergency` | `EMERGENCY` | π¨ |
|
|
78
78
|
|
|
79
79
|
### Structured context
|
|
@@ -89,19 +89,34 @@ logger.info("request complete", { method: "GET", path: "/api/users", status: 200
|
|
|
89
89
|
|
|
90
90
|
### Console format
|
|
91
91
|
|
|
92
|
+
By default, console logs are plain: `message [payload]` without emoji or timestamp.
|
|
93
|
+
|
|
94
|
+
When `LOGGER_FORMAT=pretty`, console logs look like:
|
|
95
|
+
|
|
92
96
|
```
|
|
93
|
-
|
|
97
|
+
βͺοΈ 2026-02-26 13:04:22.120 server started
|
|
94
98
|
π 2026-02-26 13:04:22.341 cache miss { "key": "user:42", "ttl": 300 }
|
|
95
|
-
|
|
99
|
+
π‘ 2026-02-26 13:04:22.512 disk space low { "used": "92%", "mount": "/data" }
|
|
96
100
|
```
|
|
97
101
|
|
|
102
|
+
This "pretty" format (emoji + local timestamp + message + optional payload) is meant to roughly emulate what you see in the GCP Logging console when browsing entries by severity and time.
|
|
103
|
+
|
|
98
104
|
### Environment variables
|
|
99
105
|
|
|
100
|
-
- `GCP_PROJECT`
|
|
101
|
-
Project ID for Google Cloud Logging. When set, the GCP backend is used.
|
|
106
|
+
- `GCP_PROJECT`
|
|
107
|
+
Project ID for Google Cloud Logging. When set (and `LOGGER_TARGET` isnβt forcing console), the GCP backend is used.
|
|
108
|
+
|
|
109
|
+
- `LOGGER_NAME`
|
|
110
|
+
Log name in Google Cloud Logging. Falls back to `K_SERVICE`, then `"local"`.
|
|
111
|
+
|
|
112
|
+
- `LOGGER_TARGET`
|
|
113
|
+
Optional override for the backend: `"gcp"` forces the GCP logger when possible, `"console"` forces the console logger.
|
|
114
|
+
|
|
115
|
+
- `LOGGER_FORMAT`
|
|
116
|
+
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.
|
|
102
117
|
|
|
103
|
-
- `K_SERVICE`
|
|
104
|
-
|
|
118
|
+
- `K_SERVICE`
|
|
119
|
+
Fallback log name in Google Cloud Logging when `LOGGER_NAME` is not set. Usually set up by Google Cloud Run. If neither is set, `"local"` is used.
|
|
105
120
|
|
|
106
121
|
### Named exports
|
|
107
122
|
|
package/dist/index.cjs
CHANGED
|
@@ -39,11 +39,18 @@ ${arg.stack}` : "");
|
|
|
39
39
|
}).join(" ");
|
|
40
40
|
}
|
|
41
41
|
var LOGGER_TARGET = process.env.LOGGER_TARGET?.toLowerCase();
|
|
42
|
+
var LOGGER_FORMAT = process.env.LOGGER_FORMAT?.toLowerCase();
|
|
42
43
|
var FORCE_GCP = LOGGER_TARGET === "gcp";
|
|
43
44
|
var FORCE_CONSOLE = LOGGER_TARGET === "console";
|
|
44
45
|
var USE_GCP = !FORCE_CONSOLE && (FORCE_GCP || !!process.env.GCP_PROJECT);
|
|
46
|
+
var CONSOLE_PRETTY = LOGGER_FORMAT === "pretty";
|
|
45
47
|
var noop = () => {
|
|
46
48
|
};
|
|
49
|
+
var gcpLabels = {};
|
|
50
|
+
if (process.env.ENVIRONMENT) gcpLabels.environment = process.env.ENVIRONMENT;
|
|
51
|
+
if (process.env.SERVICE_ID) gcpLabels.service_id = process.env.SERVICE_ID;
|
|
52
|
+
if (process.env.VERSION) gcpLabels.version = process.env.VERSION;
|
|
53
|
+
var GCP_ENV_LABEL = Object.keys(gcpLabels).length ? { labels: gcpLabels } : {};
|
|
47
54
|
function consoleLine(emoji, args) {
|
|
48
55
|
const d = /* @__PURE__ */ new Date();
|
|
49
56
|
const ts = d.toLocaleString("sv-SE") + "." + String(d.getMilliseconds()).padStart(3, "0");
|
|
@@ -53,6 +60,13 @@ function consoleLine(emoji, args) {
|
|
|
53
60
|
const suffix = hasPayload ? " " + JSON.stringify(last, null, 2).replace(/\n\s*/g, " ") : "";
|
|
54
61
|
return `${emoji} ${ts} ${msg}${suffix}`;
|
|
55
62
|
}
|
|
63
|
+
function consolePlain(args) {
|
|
64
|
+
const last = args[args.length - 1];
|
|
65
|
+
const hasPayload = args.length >= 2 && last !== null && typeof last === "object" && !Array.isArray(last) && !(last instanceof Error);
|
|
66
|
+
const msg = formatMessage(hasPayload ? args.slice(0, -1) : args);
|
|
67
|
+
const suffix = hasPayload ? " " + JSON.stringify(last, null, 2).replace(/\n\s*/g, " ") : "";
|
|
68
|
+
return `${msg}${suffix}`;
|
|
69
|
+
}
|
|
56
70
|
function gcpPayload(args) {
|
|
57
71
|
const last = args[args.length - 1];
|
|
58
72
|
if (args.length >= 2 && last !== null && typeof last === "object" && !Array.isArray(last) && !(last instanceof Error)) {
|
|
@@ -63,7 +77,7 @@ function gcpPayload(args) {
|
|
|
63
77
|
var gcpLog = null;
|
|
64
78
|
if (USE_GCP) {
|
|
65
79
|
try {
|
|
66
|
-
const logName = process.env.K_SERVICE ?? "
|
|
80
|
+
const logName = process.env.LOGGER_NAME ?? process.env.K_SERVICE ?? "local";
|
|
67
81
|
gcpLog = new import_logging.Logging({ projectId: process.env.GCP_PROJECT }).log(logName);
|
|
68
82
|
} catch {
|
|
69
83
|
}
|
|
@@ -72,34 +86,33 @@ var logger = gcpLog ? /* @__PURE__ */ (() => {
|
|
|
72
86
|
const g = gcpLog;
|
|
73
87
|
return {
|
|
74
88
|
debug: (...args) => {
|
|
75
|
-
|
|
76
|
-
g.write(g.entry({ severity: "DEBUG" }, gcpPayload(mapped))).catch(noop);
|
|
89
|
+
g.write(g.entry({ severity: "DEBUG", ...GCP_ENV_LABEL }, gcpPayload(args))).catch(noop);
|
|
77
90
|
},
|
|
78
91
|
info: (...args) => {
|
|
79
|
-
g.write(g.entry({ severity: "INFO" }, gcpPayload(args))).catch(noop);
|
|
92
|
+
g.write(g.entry({ severity: "INFO", ...GCP_ENV_LABEL }, gcpPayload(args))).catch(noop);
|
|
80
93
|
},
|
|
81
94
|
notice: (...args) => {
|
|
82
|
-
g.write(g.entry({ severity: "NOTICE" }, gcpPayload(args))).catch(noop);
|
|
95
|
+
g.write(g.entry({ severity: "NOTICE", ...GCP_ENV_LABEL }, gcpPayload(args))).catch(noop);
|
|
83
96
|
},
|
|
84
97
|
warning: (...args) => {
|
|
85
|
-
g.write(g.entry({ severity: "WARNING" }, gcpPayload(args))).catch(noop);
|
|
98
|
+
g.write(g.entry({ severity: "WARNING", ...GCP_ENV_LABEL }, gcpPayload(args))).catch(noop);
|
|
86
99
|
},
|
|
87
100
|
error: (...args) => {
|
|
88
|
-
g.write(g.entry({ severity: "ERROR" }, gcpPayload(args))).catch(noop);
|
|
101
|
+
g.write(g.entry({ severity: "ERROR", ...GCP_ENV_LABEL }, gcpPayload(args))).catch(noop);
|
|
89
102
|
},
|
|
90
103
|
critical: (...args) => {
|
|
91
|
-
g.write(g.entry({ severity: "CRITICAL" }, gcpPayload(args))).catch(noop);
|
|
104
|
+
g.write(g.entry({ severity: "CRITICAL", ...GCP_ENV_LABEL }, gcpPayload(args))).catch(noop);
|
|
92
105
|
},
|
|
93
106
|
alert: (...args) => {
|
|
94
|
-
g.write(g.entry({ severity: "ALERT" }, gcpPayload(args))).catch(noop);
|
|
107
|
+
g.write(g.entry({ severity: "ALERT", ...GCP_ENV_LABEL }, gcpPayload(args))).catch(noop);
|
|
95
108
|
},
|
|
96
109
|
emergency: (...args) => {
|
|
97
|
-
g.write(g.entry({ severity: "EMERGENCY" }, gcpPayload(args))).catch(noop);
|
|
110
|
+
g.write(g.entry({ severity: "EMERGENCY", ...GCP_ENV_LABEL }, gcpPayload(args))).catch(noop);
|
|
98
111
|
}
|
|
99
112
|
};
|
|
100
|
-
})() : {
|
|
113
|
+
})() : CONSOLE_PRETTY ? {
|
|
101
114
|
debug: (...args) => {
|
|
102
|
-
console.log(consoleLine("\u{1F41E}", args
|
|
115
|
+
console.log(consoleLine("\u{1F41E}", args));
|
|
103
116
|
},
|
|
104
117
|
info: (...args) => {
|
|
105
118
|
console.log(consoleLine("\u26AA\uFE0F", args));
|
|
@@ -111,17 +124,42 @@ var logger = gcpLog ? /* @__PURE__ */ (() => {
|
|
|
111
124
|
console.log(consoleLine("\u{1F7E1}", args));
|
|
112
125
|
},
|
|
113
126
|
error: (...args) => {
|
|
114
|
-
console.log(consoleLine("\
|
|
127
|
+
console.log(consoleLine("\u{1F534}", args));
|
|
115
128
|
},
|
|
116
129
|
critical: (...args) => {
|
|
117
|
-
console.log(consoleLine("\
|
|
130
|
+
console.log(consoleLine("\u26D4\uFE0F", args));
|
|
118
131
|
},
|
|
119
132
|
alert: (...args) => {
|
|
120
|
-
console.log(consoleLine("\
|
|
133
|
+
console.log(consoleLine("\u2757\uFE0F", args));
|
|
121
134
|
},
|
|
122
135
|
emergency: (...args) => {
|
|
123
136
|
console.log(consoleLine("\u{1F6A8}", args));
|
|
124
137
|
}
|
|
138
|
+
} : {
|
|
139
|
+
debug: (...args) => {
|
|
140
|
+
console.log(consolePlain(args));
|
|
141
|
+
},
|
|
142
|
+
info: (...args) => {
|
|
143
|
+
console.log(consolePlain(args));
|
|
144
|
+
},
|
|
145
|
+
notice: (...args) => {
|
|
146
|
+
console.log(consolePlain(args));
|
|
147
|
+
},
|
|
148
|
+
warning: (...args) => {
|
|
149
|
+
console.log(consolePlain(args));
|
|
150
|
+
},
|
|
151
|
+
error: (...args) => {
|
|
152
|
+
console.log(consolePlain(args));
|
|
153
|
+
},
|
|
154
|
+
critical: (...args) => {
|
|
155
|
+
console.log(consolePlain(args));
|
|
156
|
+
},
|
|
157
|
+
alert: (...args) => {
|
|
158
|
+
console.log(consolePlain(args));
|
|
159
|
+
},
|
|
160
|
+
emergency: (...args) => {
|
|
161
|
+
console.log(consolePlain(args));
|
|
162
|
+
}
|
|
125
163
|
};
|
|
126
164
|
var index_default = logger;
|
|
127
165
|
// Annotate the CommonJS export names for ESM import in node:
|
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 FORCE_GCP = LOGGER_TARGET === \"gcp\";\nconst FORCE_CONSOLE = LOGGER_TARGET === \"console\";\nconst USE_GCP = !FORCE_CONSOLE && (FORCE_GCP || !!process.env.GCP_PROJECT);\nconst noop = (): void => {};\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// 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.K_SERVICE ?? \"app\";\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 const mapped = args.map(a => typeof a === \"string\" ? a.replace(/\\n/g, \" \") : a);\n g.write(g.entry({ severity: \"DEBUG\" }, gcpPayload(mapped))).catch(noop);\n },\n info: (...args: unknown[]): void => {\n g.write(g.entry({ severity: \"INFO\" }, gcpPayload(args))).catch(noop);\n },\n notice: (...args: unknown[]): void => {\n g.write(g.entry({ severity: \"NOTICE\" }, gcpPayload(args))).catch(noop);\n },\n warning: (...args: unknown[]): void => {\n g.write(g.entry({ severity: \"WARNING\" }, gcpPayload(args))).catch(noop);\n },\n error: (...args: unknown[]): void => {\n g.write(g.entry({ severity: \"ERROR\" }, gcpPayload(args))).catch(noop);\n },\n critical: (...args: unknown[]): void => {\n g.write(g.entry({ severity: \"CRITICAL\" }, gcpPayload(args))).catch(noop);\n },\n alert: (...args: unknown[]): void => {\n g.write(g.entry({ severity: \"ALERT\" }, gcpPayload(args))).catch(noop);\n },\n emergency: (...args: unknown[]): void => {\n g.write(g.entry({ severity: \"EMERGENCY\" }, gcpPayload(args))).catch(noop);\n },\n };\n })()\n : {\n debug: (...args: unknown[]): void => {\n console.log(consoleLine(\"π\", args.map(a => typeof a === \"string\" ? a.replace(/\\n/g, \" \") : a)));\n },\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\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.\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":[]}
|
package/dist/index.js
CHANGED
|
@@ -13,11 +13,18 @@ ${arg.stack}` : "");
|
|
|
13
13
|
}).join(" ");
|
|
14
14
|
}
|
|
15
15
|
var LOGGER_TARGET = process.env.LOGGER_TARGET?.toLowerCase();
|
|
16
|
+
var LOGGER_FORMAT = process.env.LOGGER_FORMAT?.toLowerCase();
|
|
16
17
|
var FORCE_GCP = LOGGER_TARGET === "gcp";
|
|
17
18
|
var FORCE_CONSOLE = LOGGER_TARGET === "console";
|
|
18
19
|
var USE_GCP = !FORCE_CONSOLE && (FORCE_GCP || !!process.env.GCP_PROJECT);
|
|
20
|
+
var CONSOLE_PRETTY = LOGGER_FORMAT === "pretty";
|
|
19
21
|
var noop = () => {
|
|
20
22
|
};
|
|
23
|
+
var gcpLabels = {};
|
|
24
|
+
if (process.env.ENVIRONMENT) gcpLabels.environment = process.env.ENVIRONMENT;
|
|
25
|
+
if (process.env.SERVICE_ID) gcpLabels.service_id = process.env.SERVICE_ID;
|
|
26
|
+
if (process.env.VERSION) gcpLabels.version = process.env.VERSION;
|
|
27
|
+
var GCP_ENV_LABEL = Object.keys(gcpLabels).length ? { labels: gcpLabels } : {};
|
|
21
28
|
function consoleLine(emoji, args) {
|
|
22
29
|
const d = /* @__PURE__ */ new Date();
|
|
23
30
|
const ts = d.toLocaleString("sv-SE") + "." + String(d.getMilliseconds()).padStart(3, "0");
|
|
@@ -27,6 +34,13 @@ function consoleLine(emoji, args) {
|
|
|
27
34
|
const suffix = hasPayload ? " " + JSON.stringify(last, null, 2).replace(/\n\s*/g, " ") : "";
|
|
28
35
|
return `${emoji} ${ts} ${msg}${suffix}`;
|
|
29
36
|
}
|
|
37
|
+
function consolePlain(args) {
|
|
38
|
+
const last = args[args.length - 1];
|
|
39
|
+
const hasPayload = args.length >= 2 && last !== null && typeof last === "object" && !Array.isArray(last) && !(last instanceof Error);
|
|
40
|
+
const msg = formatMessage(hasPayload ? args.slice(0, -1) : args);
|
|
41
|
+
const suffix = hasPayload ? " " + JSON.stringify(last, null, 2).replace(/\n\s*/g, " ") : "";
|
|
42
|
+
return `${msg}${suffix}`;
|
|
43
|
+
}
|
|
30
44
|
function gcpPayload(args) {
|
|
31
45
|
const last = args[args.length - 1];
|
|
32
46
|
if (args.length >= 2 && last !== null && typeof last === "object" && !Array.isArray(last) && !(last instanceof Error)) {
|
|
@@ -37,7 +51,7 @@ function gcpPayload(args) {
|
|
|
37
51
|
var gcpLog = null;
|
|
38
52
|
if (USE_GCP) {
|
|
39
53
|
try {
|
|
40
|
-
const logName = process.env.K_SERVICE ?? "
|
|
54
|
+
const logName = process.env.LOGGER_NAME ?? process.env.K_SERVICE ?? "local";
|
|
41
55
|
gcpLog = new Logging({ projectId: process.env.GCP_PROJECT }).log(logName);
|
|
42
56
|
} catch {
|
|
43
57
|
}
|
|
@@ -46,34 +60,33 @@ var logger = gcpLog ? /* @__PURE__ */ (() => {
|
|
|
46
60
|
const g = gcpLog;
|
|
47
61
|
return {
|
|
48
62
|
debug: (...args) => {
|
|
49
|
-
|
|
50
|
-
g.write(g.entry({ severity: "DEBUG" }, gcpPayload(mapped))).catch(noop);
|
|
63
|
+
g.write(g.entry({ severity: "DEBUG", ...GCP_ENV_LABEL }, gcpPayload(args))).catch(noop);
|
|
51
64
|
},
|
|
52
65
|
info: (...args) => {
|
|
53
|
-
g.write(g.entry({ severity: "INFO" }, gcpPayload(args))).catch(noop);
|
|
66
|
+
g.write(g.entry({ severity: "INFO", ...GCP_ENV_LABEL }, gcpPayload(args))).catch(noop);
|
|
54
67
|
},
|
|
55
68
|
notice: (...args) => {
|
|
56
|
-
g.write(g.entry({ severity: "NOTICE" }, gcpPayload(args))).catch(noop);
|
|
69
|
+
g.write(g.entry({ severity: "NOTICE", ...GCP_ENV_LABEL }, gcpPayload(args))).catch(noop);
|
|
57
70
|
},
|
|
58
71
|
warning: (...args) => {
|
|
59
|
-
g.write(g.entry({ severity: "WARNING" }, gcpPayload(args))).catch(noop);
|
|
72
|
+
g.write(g.entry({ severity: "WARNING", ...GCP_ENV_LABEL }, gcpPayload(args))).catch(noop);
|
|
60
73
|
},
|
|
61
74
|
error: (...args) => {
|
|
62
|
-
g.write(g.entry({ severity: "ERROR" }, gcpPayload(args))).catch(noop);
|
|
75
|
+
g.write(g.entry({ severity: "ERROR", ...GCP_ENV_LABEL }, gcpPayload(args))).catch(noop);
|
|
63
76
|
},
|
|
64
77
|
critical: (...args) => {
|
|
65
|
-
g.write(g.entry({ severity: "CRITICAL" }, gcpPayload(args))).catch(noop);
|
|
78
|
+
g.write(g.entry({ severity: "CRITICAL", ...GCP_ENV_LABEL }, gcpPayload(args))).catch(noop);
|
|
66
79
|
},
|
|
67
80
|
alert: (...args) => {
|
|
68
|
-
g.write(g.entry({ severity: "ALERT" }, gcpPayload(args))).catch(noop);
|
|
81
|
+
g.write(g.entry({ severity: "ALERT", ...GCP_ENV_LABEL }, gcpPayload(args))).catch(noop);
|
|
69
82
|
},
|
|
70
83
|
emergency: (...args) => {
|
|
71
|
-
g.write(g.entry({ severity: "EMERGENCY" }, gcpPayload(args))).catch(noop);
|
|
84
|
+
g.write(g.entry({ severity: "EMERGENCY", ...GCP_ENV_LABEL }, gcpPayload(args))).catch(noop);
|
|
72
85
|
}
|
|
73
86
|
};
|
|
74
|
-
})() : {
|
|
87
|
+
})() : CONSOLE_PRETTY ? {
|
|
75
88
|
debug: (...args) => {
|
|
76
|
-
console.log(consoleLine("\u{1F41E}", args
|
|
89
|
+
console.log(consoleLine("\u{1F41E}", args));
|
|
77
90
|
},
|
|
78
91
|
info: (...args) => {
|
|
79
92
|
console.log(consoleLine("\u26AA\uFE0F", args));
|
|
@@ -85,17 +98,42 @@ var logger = gcpLog ? /* @__PURE__ */ (() => {
|
|
|
85
98
|
console.log(consoleLine("\u{1F7E1}", args));
|
|
86
99
|
},
|
|
87
100
|
error: (...args) => {
|
|
88
|
-
console.log(consoleLine("\
|
|
101
|
+
console.log(consoleLine("\u{1F534}", args));
|
|
89
102
|
},
|
|
90
103
|
critical: (...args) => {
|
|
91
|
-
console.log(consoleLine("\
|
|
104
|
+
console.log(consoleLine("\u26D4\uFE0F", args));
|
|
92
105
|
},
|
|
93
106
|
alert: (...args) => {
|
|
94
|
-
console.log(consoleLine("\
|
|
107
|
+
console.log(consoleLine("\u2757\uFE0F", args));
|
|
95
108
|
},
|
|
96
109
|
emergency: (...args) => {
|
|
97
110
|
console.log(consoleLine("\u{1F6A8}", args));
|
|
98
111
|
}
|
|
112
|
+
} : {
|
|
113
|
+
debug: (...args) => {
|
|
114
|
+
console.log(consolePlain(args));
|
|
115
|
+
},
|
|
116
|
+
info: (...args) => {
|
|
117
|
+
console.log(consolePlain(args));
|
|
118
|
+
},
|
|
119
|
+
notice: (...args) => {
|
|
120
|
+
console.log(consolePlain(args));
|
|
121
|
+
},
|
|
122
|
+
warning: (...args) => {
|
|
123
|
+
console.log(consolePlain(args));
|
|
124
|
+
},
|
|
125
|
+
error: (...args) => {
|
|
126
|
+
console.log(consolePlain(args));
|
|
127
|
+
},
|
|
128
|
+
critical: (...args) => {
|
|
129
|
+
console.log(consolePlain(args));
|
|
130
|
+
},
|
|
131
|
+
alert: (...args) => {
|
|
132
|
+
console.log(consolePlain(args));
|
|
133
|
+
},
|
|
134
|
+
emergency: (...args) => {
|
|
135
|
+
console.log(consolePlain(args));
|
|
136
|
+
}
|
|
99
137
|
};
|
|
100
138
|
var index_default = logger;
|
|
101
139
|
export {
|
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 FORCE_GCP = LOGGER_TARGET === \"gcp\";\nconst FORCE_CONSOLE = LOGGER_TARGET === \"console\";\nconst USE_GCP = !FORCE_CONSOLE && (FORCE_GCP || !!process.env.GCP_PROJECT);\nconst noop = (): void => {};\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// 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.K_SERVICE ?? \"app\";\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 const mapped = args.map(a => typeof a === \"string\" ? a.replace(/\\n/g, \" \") : a);\n g.write(g.entry({ severity: \"DEBUG\" }, gcpPayload(mapped))).catch(noop);\n },\n info: (...args: unknown[]): void => {\n g.write(g.entry({ severity: \"INFO\" }, gcpPayload(args))).catch(noop);\n },\n notice: (...args: unknown[]): void => {\n g.write(g.entry({ severity: \"NOTICE\" }, gcpPayload(args))).catch(noop);\n },\n warning: (...args: unknown[]): void => {\n g.write(g.entry({ severity: \"WARNING\" }, gcpPayload(args))).catch(noop);\n },\n error: (...args: unknown[]): void => {\n g.write(g.entry({ severity: \"ERROR\" }, gcpPayload(args))).catch(noop);\n },\n critical: (...args: unknown[]): void => {\n g.write(g.entry({ severity: \"CRITICAL\" }, gcpPayload(args))).catch(noop);\n },\n alert: (...args: unknown[]): void => {\n g.write(g.entry({ severity: \"ALERT\" }, gcpPayload(args))).catch(noop);\n },\n emergency: (...args: unknown[]): void => {\n g.write(g.entry({ severity: \"EMERGENCY\" }, gcpPayload(args))).catch(noop);\n },\n };\n })()\n : {\n debug: (...args: unknown[]): void => {\n console.log(consoleLine(\"π\", args.map(a => typeof a === \"string\" ? a.replace(/\\n/g, \" \") : a)));\n },\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\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.\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":[]}
|