@logickernel/logger 0.6.0 → 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/dist/index.cjs +15 -20
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +15 -20
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.cjs
CHANGED
|
@@ -46,6 +46,11 @@ var USE_GCP = !FORCE_CONSOLE && (FORCE_GCP || !!process.env.GCP_PROJECT);
|
|
|
46
46
|
var CONSOLE_PRETTY = LOGGER_FORMAT === "pretty";
|
|
47
47
|
var noop = () => {
|
|
48
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 } : {};
|
|
49
54
|
function consoleLine(emoji, args) {
|
|
50
55
|
const d = /* @__PURE__ */ new Date();
|
|
51
56
|
const ts = d.toLocaleString("sv-SE") + "." + String(d.getMilliseconds()).padStart(3, "0");
|
|
@@ -81,39 +86,33 @@ var logger = gcpLog ? /* @__PURE__ */ (() => {
|
|
|
81
86
|
const g = gcpLog;
|
|
82
87
|
return {
|
|
83
88
|
debug: (...args) => {
|
|
84
|
-
|
|
85
|
-
g.write(g.entry({ severity: "DEBUG" }, gcpPayload(mapped))).catch(noop);
|
|
89
|
+
g.write(g.entry({ severity: "DEBUG", ...GCP_ENV_LABEL }, gcpPayload(args))).catch(noop);
|
|
86
90
|
},
|
|
87
91
|
info: (...args) => {
|
|
88
|
-
g.write(g.entry({ severity: "INFO" }, gcpPayload(args))).catch(noop);
|
|
92
|
+
g.write(g.entry({ severity: "INFO", ...GCP_ENV_LABEL }, gcpPayload(args))).catch(noop);
|
|
89
93
|
},
|
|
90
94
|
notice: (...args) => {
|
|
91
|
-
g.write(g.entry({ severity: "NOTICE" }, gcpPayload(args))).catch(noop);
|
|
95
|
+
g.write(g.entry({ severity: "NOTICE", ...GCP_ENV_LABEL }, gcpPayload(args))).catch(noop);
|
|
92
96
|
},
|
|
93
97
|
warning: (...args) => {
|
|
94
|
-
g.write(g.entry({ severity: "WARNING" }, gcpPayload(args))).catch(noop);
|
|
98
|
+
g.write(g.entry({ severity: "WARNING", ...GCP_ENV_LABEL }, gcpPayload(args))).catch(noop);
|
|
95
99
|
},
|
|
96
100
|
error: (...args) => {
|
|
97
|
-
g.write(g.entry({ severity: "ERROR" }, gcpPayload(args))).catch(noop);
|
|
101
|
+
g.write(g.entry({ severity: "ERROR", ...GCP_ENV_LABEL }, gcpPayload(args))).catch(noop);
|
|
98
102
|
},
|
|
99
103
|
critical: (...args) => {
|
|
100
|
-
g.write(g.entry({ severity: "CRITICAL" }, gcpPayload(args))).catch(noop);
|
|
104
|
+
g.write(g.entry({ severity: "CRITICAL", ...GCP_ENV_LABEL }, gcpPayload(args))).catch(noop);
|
|
101
105
|
},
|
|
102
106
|
alert: (...args) => {
|
|
103
|
-
g.write(g.entry({ severity: "ALERT" }, gcpPayload(args))).catch(noop);
|
|
107
|
+
g.write(g.entry({ severity: "ALERT", ...GCP_ENV_LABEL }, gcpPayload(args))).catch(noop);
|
|
104
108
|
},
|
|
105
109
|
emergency: (...args) => {
|
|
106
|
-
g.write(g.entry({ severity: "EMERGENCY" }, gcpPayload(args))).catch(noop);
|
|
110
|
+
g.write(g.entry({ severity: "EMERGENCY", ...GCP_ENV_LABEL }, gcpPayload(args))).catch(noop);
|
|
107
111
|
}
|
|
108
112
|
};
|
|
109
113
|
})() : CONSOLE_PRETTY ? {
|
|
110
114
|
debug: (...args) => {
|
|
111
|
-
console.log(
|
|
112
|
-
consoleLine(
|
|
113
|
-
"\u{1F41E}",
|
|
114
|
-
args.map((a) => typeof a === "string" ? a.replace(/\n/g, " ") : a)
|
|
115
|
-
)
|
|
116
|
-
);
|
|
115
|
+
console.log(consoleLine("\u{1F41E}", args));
|
|
117
116
|
},
|
|
118
117
|
info: (...args) => {
|
|
119
118
|
console.log(consoleLine("\u26AA\uFE0F", args));
|
|
@@ -138,11 +137,7 @@ var logger = gcpLog ? /* @__PURE__ */ (() => {
|
|
|
138
137
|
}
|
|
139
138
|
} : {
|
|
140
139
|
debug: (...args) => {
|
|
141
|
-
console.log(
|
|
142
|
-
consolePlain(
|
|
143
|
-
args.map((a) => typeof a === "string" ? a.replace(/\n/g, " ") : a)
|
|
144
|
-
)
|
|
145
|
-
);
|
|
140
|
+
console.log(consolePlain(args));
|
|
146
141
|
},
|
|
147
142
|
info: (...args) => {
|
|
148
143
|
console.log(consolePlain(args));
|
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 => {};\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 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 : CONSOLE_PRETTY\n ? {\n debug: (...args: unknown[]): void => {\n console.log(\n consoleLine(\n \"🐞\",\n args.map(a => (typeof a === \"string\" ? a.replace(/\\n/g, \" \") : a)),\n ),\n );\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 : {\n debug: (...args: unknown[]): void => {\n console.log(\n consolePlain(\n args.map(a => (typeof a === \"string\" ? a.replace(/\\n/g, \" \") : a)),\n ),\n );\n },\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.\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
|
@@ -20,6 +20,11 @@ var USE_GCP = !FORCE_CONSOLE && (FORCE_GCP || !!process.env.GCP_PROJECT);
|
|
|
20
20
|
var CONSOLE_PRETTY = LOGGER_FORMAT === "pretty";
|
|
21
21
|
var noop = () => {
|
|
22
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 } : {};
|
|
23
28
|
function consoleLine(emoji, args) {
|
|
24
29
|
const d = /* @__PURE__ */ new Date();
|
|
25
30
|
const ts = d.toLocaleString("sv-SE") + "." + String(d.getMilliseconds()).padStart(3, "0");
|
|
@@ -55,39 +60,33 @@ var logger = gcpLog ? /* @__PURE__ */ (() => {
|
|
|
55
60
|
const g = gcpLog;
|
|
56
61
|
return {
|
|
57
62
|
debug: (...args) => {
|
|
58
|
-
|
|
59
|
-
g.write(g.entry({ severity: "DEBUG" }, gcpPayload(mapped))).catch(noop);
|
|
63
|
+
g.write(g.entry({ severity: "DEBUG", ...GCP_ENV_LABEL }, gcpPayload(args))).catch(noop);
|
|
60
64
|
},
|
|
61
65
|
info: (...args) => {
|
|
62
|
-
g.write(g.entry({ severity: "INFO" }, gcpPayload(args))).catch(noop);
|
|
66
|
+
g.write(g.entry({ severity: "INFO", ...GCP_ENV_LABEL }, gcpPayload(args))).catch(noop);
|
|
63
67
|
},
|
|
64
68
|
notice: (...args) => {
|
|
65
|
-
g.write(g.entry({ severity: "NOTICE" }, gcpPayload(args))).catch(noop);
|
|
69
|
+
g.write(g.entry({ severity: "NOTICE", ...GCP_ENV_LABEL }, gcpPayload(args))).catch(noop);
|
|
66
70
|
},
|
|
67
71
|
warning: (...args) => {
|
|
68
|
-
g.write(g.entry({ severity: "WARNING" }, gcpPayload(args))).catch(noop);
|
|
72
|
+
g.write(g.entry({ severity: "WARNING", ...GCP_ENV_LABEL }, gcpPayload(args))).catch(noop);
|
|
69
73
|
},
|
|
70
74
|
error: (...args) => {
|
|
71
|
-
g.write(g.entry({ severity: "ERROR" }, gcpPayload(args))).catch(noop);
|
|
75
|
+
g.write(g.entry({ severity: "ERROR", ...GCP_ENV_LABEL }, gcpPayload(args))).catch(noop);
|
|
72
76
|
},
|
|
73
77
|
critical: (...args) => {
|
|
74
|
-
g.write(g.entry({ severity: "CRITICAL" }, gcpPayload(args))).catch(noop);
|
|
78
|
+
g.write(g.entry({ severity: "CRITICAL", ...GCP_ENV_LABEL }, gcpPayload(args))).catch(noop);
|
|
75
79
|
},
|
|
76
80
|
alert: (...args) => {
|
|
77
|
-
g.write(g.entry({ severity: "ALERT" }, gcpPayload(args))).catch(noop);
|
|
81
|
+
g.write(g.entry({ severity: "ALERT", ...GCP_ENV_LABEL }, gcpPayload(args))).catch(noop);
|
|
78
82
|
},
|
|
79
83
|
emergency: (...args) => {
|
|
80
|
-
g.write(g.entry({ severity: "EMERGENCY" }, gcpPayload(args))).catch(noop);
|
|
84
|
+
g.write(g.entry({ severity: "EMERGENCY", ...GCP_ENV_LABEL }, gcpPayload(args))).catch(noop);
|
|
81
85
|
}
|
|
82
86
|
};
|
|
83
87
|
})() : CONSOLE_PRETTY ? {
|
|
84
88
|
debug: (...args) => {
|
|
85
|
-
console.log(
|
|
86
|
-
consoleLine(
|
|
87
|
-
"\u{1F41E}",
|
|
88
|
-
args.map((a) => typeof a === "string" ? a.replace(/\n/g, " ") : a)
|
|
89
|
-
)
|
|
90
|
-
);
|
|
89
|
+
console.log(consoleLine("\u{1F41E}", args));
|
|
91
90
|
},
|
|
92
91
|
info: (...args) => {
|
|
93
92
|
console.log(consoleLine("\u26AA\uFE0F", args));
|
|
@@ -112,11 +111,7 @@ var logger = gcpLog ? /* @__PURE__ */ (() => {
|
|
|
112
111
|
}
|
|
113
112
|
} : {
|
|
114
113
|
debug: (...args) => {
|
|
115
|
-
console.log(
|
|
116
|
-
consolePlain(
|
|
117
|
-
args.map((a) => typeof a === "string" ? a.replace(/\n/g, " ") : a)
|
|
118
|
-
)
|
|
119
|
-
);
|
|
114
|
+
console.log(consolePlain(args));
|
|
120
115
|
},
|
|
121
116
|
info: (...args) => {
|
|
122
117
|
console.log(consolePlain(args));
|
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 => {};\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 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 : CONSOLE_PRETTY\n ? {\n debug: (...args: unknown[]): void => {\n console.log(\n consoleLine(\n \"🐞\",\n args.map(a => (typeof a === \"string\" ? a.replace(/\\n/g, \" \") : a)),\n ),\n );\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 : {\n debug: (...args: unknown[]): void => {\n console.log(\n consolePlain(\n args.map(a => (typeof a === \"string\" ? a.replace(/\\n/g, \" \") : a)),\n ),\n );\n },\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.\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":[]}
|