logixia 1.13.3 → 2.0.4
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 +117 -44
- package/dist/async-context-B05ArHgM.mjs +134 -0
- package/dist/async-context-B05ArHgM.mjs.map +1 -0
- package/dist/async-context-DTQgi8f7.js +150 -0
- package/dist/async-context-DTQgi8f7.js.map +1 -0
- package/dist/{azure-monitor.transport-CHnjVRF-.mjs → azure-monitor.transport-BPbgjATu.mjs} +27 -15
- package/dist/azure-monitor.transport-BPbgjATu.mjs.map +1 -0
- package/dist/{azure-monitor.transport-BDFO4F-i.d.ts → azure-monitor.transport-C7kYyZUW.d.mts} +3 -6
- package/dist/azure-monitor.transport-C7kYyZUW.d.mts.map +1 -0
- package/dist/{azure-monitor.transport-CrvfHd9C.js → azure-monitor.transport-CwbOLZHB.js} +32 -20
- package/dist/azure-monitor.transport-CwbOLZHB.js.map +1 -0
- package/dist/{azure-monitor.transport-D5wQEH04.d.mts → azure-monitor.transport-DV03Z5P4.d.ts} +3 -6
- package/dist/azure-monitor.transport-DV03Z5P4.d.ts.map +1 -0
- package/dist/azure.d.mts +1 -2
- package/dist/azure.d.ts +1 -2
- package/dist/azure.js +3 -6
- package/dist/azure.mjs +1 -6
- package/dist/{batch-buffer-PGvSgbmd.mjs → batch-buffer-0fgLmIPn.mjs} +21 -7
- package/dist/batch-buffer-0fgLmIPn.mjs.map +1 -0
- package/dist/{batch-buffer-BY-mRWIK.js → batch-buffer-DT4gdXmf.js} +53 -40
- package/dist/batch-buffer-DT4gdXmf.js.map +1 -0
- package/dist/browser.d.mts +52 -23
- package/dist/browser.d.mts.map +1 -1
- package/dist/browser.d.ts +52 -23
- package/dist/browser.d.ts.map +1 -1
- package/dist/browser.js +460 -62
- package/dist/browser.js.map +1 -1
- package/dist/browser.mjs +461 -65
- package/dist/browser.mjs.map +1 -1
- package/dist/{nestjs-extras-ImbuDhs1.mjs → builder-D70z6kjj.mjs} +279 -965
- package/dist/builder-D70z6kjj.mjs.map +1 -0
- package/dist/{nestjs-extras-DnJ6vrIC.js → builder-M7NoaugM.js} +421 -1177
- package/dist/builder-M7NoaugM.js.map +1 -0
- package/dist/cli/index.js +86 -67
- package/dist/cloudwatch.d.mts +1 -2
- package/dist/cloudwatch.d.ts +1 -2
- package/dist/cloudwatch.js +3 -7
- package/dist/cloudwatch.mjs +1 -7
- package/dist/{cloudwatch.transport-BO1ahxw-.js → cloudwatch.transport-B2wKQFF7.js} +61 -36
- package/dist/cloudwatch.transport-B2wKQFF7.js.map +1 -0
- package/dist/{cloudwatch.transport-DZ6ies7g.mjs → cloudwatch.transport-BTvYfLs9.mjs} +54 -28
- package/dist/cloudwatch.transport-BTvYfLs9.mjs.map +1 -0
- package/dist/{cloudwatch.transport-B00st6Xv.d.ts → cloudwatch.transport-Bf7L4I59.d.ts} +2 -6
- package/dist/cloudwatch.transport-Bf7L4I59.d.ts.map +1 -0
- package/dist/{cloudwatch.transport-Blc7Gtxt.d.mts → cloudwatch.transport-Rj4yTpRn.d.mts} +2 -6
- package/dist/cloudwatch.transport-Rj4yTpRn.d.mts.map +1 -0
- package/dist/{coerce.utils-Cu6IUTgX.mjs → coerce.utils-B_rEudCn.mjs} +3 -4
- package/dist/{coerce.utils-Cu6IUTgX.mjs.map → coerce.utils-B_rEudCn.mjs.map} +1 -1
- package/dist/{coerce.utils-B-LilukN.js → coerce.utils-C1C5sIX0.js} +8 -10
- package/dist/{coerce.utils-B-LilukN.js.map → coerce.utils-C1C5sIX0.js.map} +1 -1
- package/dist/correlation.d.mts +13 -16
- package/dist/correlation.d.mts.map +1 -1
- package/dist/correlation.d.ts +13 -16
- package/dist/correlation.d.ts.map +1 -1
- package/dist/correlation.js +58 -9
- package/dist/correlation.js.map +1 -1
- package/dist/correlation.mjs +56 -6
- package/dist/correlation.mjs.map +1 -1
- package/dist/{entry-fields-BJkuPnIg.mjs → entry-fields-CGuvT2R0.mjs} +5 -6
- package/dist/entry-fields-CGuvT2R0.mjs.map +1 -0
- package/dist/{entry-fields-BvOLFlJ4.js → entry-fields-RLd1jCoR.js} +10 -12
- package/dist/entry-fields-RLd1jCoR.js.map +1 -0
- package/dist/gcp.d.mts +1 -2
- package/dist/gcp.d.ts +1 -2
- package/dist/gcp.js +3 -7
- package/dist/gcp.mjs +1 -7
- package/dist/{gcp.transport-m4fVw0b1.d.ts → gcp.transport-C5D72b1g.d.mts} +3 -6
- package/dist/gcp.transport-C5D72b1g.d.mts.map +1 -0
- package/dist/{gcp.transport-zzNyIoih.d.mts → gcp.transport-CFQfdAOK.d.ts} +3 -6
- package/dist/gcp.transport-CFQfdAOK.d.ts.map +1 -0
- package/dist/{gcp.transport-DBX5TPIy.mjs → gcp.transport-CGKopAhQ.mjs} +55 -16
- package/dist/gcp.transport-CGKopAhQ.mjs.map +1 -0
- package/dist/{gcp.transport-CHV8MGgz.js → gcp.transport-KZe9hCAR.js} +60 -22
- package/dist/gcp.transport-KZe9hCAR.js.map +1 -0
- package/dist/{index-nZEeCr3X.d.ts → index-DwozbmB4.d.ts} +3 -8
- package/dist/index-DwozbmB4.d.ts.map +1 -0
- package/dist/{index-BPwEisy4.d.mts → index-xqaJtAZn.d.mts} +3 -8
- package/dist/index-xqaJtAZn.d.mts.map +1 -0
- package/dist/index.d.mts +141 -203
- package/dist/index.d.mts.map +1 -1
- package/dist/index.d.ts +140 -202
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +196 -381
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +145 -294
- package/dist/index.mjs.map +1 -1
- package/dist/internal-log-b0Vp4qrB.js +183 -0
- package/dist/internal-log-b0Vp4qrB.js.map +1 -0
- package/dist/internal-log-uCSd1PMc.mjs +142 -0
- package/dist/internal-log-uCSd1PMc.mjs.map +1 -0
- package/dist/logitron-logger-D2B75Oc7.d.ts +365 -0
- package/dist/logitron-logger-D2B75Oc7.d.ts.map +1 -0
- package/dist/logitron-logger-oEd6wNhf.d.mts +365 -0
- package/dist/logitron-logger-oEd6wNhf.d.mts.map +1 -0
- package/dist/middleware.d.mts +10 -12
- package/dist/middleware.d.mts.map +1 -1
- package/dist/middleware.d.ts +10 -12
- package/dist/middleware.d.ts.map +1 -1
- package/dist/middleware.js +16 -47
- package/dist/middleware.js.map +1 -1
- package/dist/middleware.mjs +13 -45
- package/dist/middleware.mjs.map +1 -1
- package/dist/nest.d.mts +467 -10
- package/dist/nest.d.mts.map +1 -1
- package/dist/nest.d.ts +467 -10
- package/dist/nest.d.ts.map +1 -1
- package/dist/nest.js +889 -43
- package/dist/nest.js.map +1 -0
- package/dist/nest.mjs +850 -9
- package/dist/nest.mjs.map +1 -0
- package/dist/{trace.utils-CvXgaiQT.mjs → request-trace-C_fvIDv4.mjs} +44 -9
- package/dist/request-trace-C_fvIDv4.mjs.map +1 -0
- package/dist/{trace.utils-DpBOLDtq.js → request-trace-wTJdKp6-.js} +121 -77
- package/dist/request-trace-wTJdKp6-.js.map +1 -0
- package/dist/rolldown-runtime-D3PmRqjj.mjs +4 -0
- package/dist/{safe-stringify-DJ66tW5I.mjs → safe-stringify-BMRl3EX3.mjs} +3 -4
- package/dist/safe-stringify-BMRl3EX3.mjs.map +1 -0
- package/dist/{safe-stringify-DWo3aZp_.js → safe-stringify-DLz1Kz3o.js} +23 -25
- package/dist/safe-stringify-DLz1Kz3o.js.map +1 -0
- package/dist/{search-CHUZPl0h.d.ts → search-BH33XhuU.d.mts} +2 -22
- package/dist/search-BH33XhuU.d.mts.map +1 -0
- package/dist/{search-DjXSn6v5.mjs → search-CWMVYC-R.mjs} +34 -41
- package/dist/search-CWMVYC-R.mjs.map +1 -0
- package/dist/{search-BfBzDIT9.d.mts → search-CazwyX5Z.d.ts} +2 -22
- package/dist/search-CazwyX5Z.d.ts.map +1 -0
- package/dist/{search-B0MH1SJJ.js → search-DUfWuzFP.js} +64 -71
- package/dist/search-DUfWuzFP.js.map +1 -0
- package/dist/search.d.mts +2 -4
- package/dist/search.d.ts +2 -4
- package/dist/search.js +3 -4
- package/dist/search.mjs +1 -4
- package/dist/secret-config-BegMLkYl.mjs +209 -0
- package/dist/secret-config-BegMLkYl.mjs.map +1 -0
- package/dist/secret-config-CBZBs0p1.js +271 -0
- package/dist/secret-config-CBZBs0p1.js.map +1 -0
- package/dist/slack.transport-Ce96JBDk.mjs +824 -0
- package/dist/slack.transport-Ce96JBDk.mjs.map +1 -0
- package/dist/slack.transport-Dlx3xvb7.js +847 -0
- package/dist/slack.transport-Dlx3xvb7.js.map +1 -0
- package/dist/slack.transport-DrirgDNy.d.ts +159 -0
- package/dist/slack.transport-DrirgDNy.d.ts.map +1 -0
- package/dist/slack.transport-DxHOXlLu.d.mts +159 -0
- package/dist/slack.transport-DxHOXlLu.d.mts.map +1 -0
- package/dist/testing.d.mts +3 -8
- package/dist/testing.d.mts.map +1 -1
- package/dist/testing.d.ts +3 -8
- package/dist/testing.d.ts.map +1 -1
- package/dist/testing.js +3 -4
- package/dist/testing.js.map +1 -1
- package/dist/testing.mjs +2 -3
- package/dist/testing.mjs.map +1 -1
- package/dist/{transport.manager-Crau3Rle.js → transport.manager-DkcEOlqV.js} +331 -234
- package/dist/transport.manager-DkcEOlqV.js.map +1 -0
- package/dist/{transport.manager-CpdVHEGP.mjs → transport.manager-eZ_EeC00.mjs} +274 -178
- package/dist/transport.manager-eZ_EeC00.mjs.map +1 -0
- package/dist/{transport.types-CtNr3D7S.d.mts → transport.types-BJVL1QQl.d.mts} +5 -4
- package/dist/transport.types-BJVL1QQl.d.mts.map +1 -0
- package/dist/{transport.types-DqVLZTyf.d.ts → transport.types-BJVL1QQl.d.ts} +5 -4
- package/dist/transport.types-BJVL1QQl.d.ts.map +1 -0
- package/dist/transports.d.mts +32 -41
- package/dist/transports.d.mts.map +1 -1
- package/dist/transports.d.ts +32 -41
- package/dist/transports.d.ts.map +1 -1
- package/dist/transports.js +12 -12
- package/dist/transports.mjs +7 -12
- package/dist/worker-entry.js +337 -87
- package/dist/worker.d.mts +1 -2
- package/dist/worker.d.ts +1 -2
- package/dist/worker.js +3 -4
- package/dist/worker.mjs +1 -4
- package/dist/{worker.transport-Bj-i0P9V.d.ts → worker.transport-BuPwBi3d.d.ts} +2 -6
- package/dist/worker.transport-BuPwBi3d.d.ts.map +1 -0
- package/dist/{worker.transport-JP8YHBuU.js → worker.transport-C6GNl_r2.js} +44 -14
- package/dist/worker.transport-C6GNl_r2.js.map +1 -0
- package/dist/{worker.transport-otwhJ_Et.mjs → worker.transport-DLVA4y2e.mjs} +39 -9
- package/dist/worker.transport-DLVA4y2e.mjs.map +1 -0
- package/dist/{worker.transport-Bgv9heDI.d.mts → worker.transport-hJay1wxA.d.mts} +2 -6
- package/dist/worker.transport-hJay1wxA.d.mts.map +1 -0
- package/package.json +36 -19
- package/dist/async-context-BzJrbfQs.mjs +0 -72
- package/dist/async-context-BzJrbfQs.mjs.map +0 -1
- package/dist/async-context-DyQQYq3I.js +0 -92
- package/dist/async-context-DyQQYq3I.js.map +0 -1
- package/dist/azure-monitor.transport-BDFO4F-i.d.ts.map +0 -1
- package/dist/azure-monitor.transport-CHnjVRF-.mjs.map +0 -1
- package/dist/azure-monitor.transport-CrvfHd9C.js.map +0 -1
- package/dist/azure-monitor.transport-D5wQEH04.d.mts.map +0 -1
- package/dist/batch-buffer-BY-mRWIK.js.map +0 -1
- package/dist/batch-buffer-PGvSgbmd.mjs.map +0 -1
- package/dist/chunk-DLSkYcPk.mjs +0 -7
- package/dist/chunk-nOFOJqeH.js +0 -30
- package/dist/cloudwatch.transport-B00st6Xv.d.ts.map +0 -1
- package/dist/cloudwatch.transport-BO1ahxw-.js.map +0 -1
- package/dist/cloudwatch.transport-Blc7Gtxt.d.mts.map +0 -1
- package/dist/cloudwatch.transport-DZ6ies7g.mjs.map +0 -1
- package/dist/entry-fields-BJkuPnIg.mjs.map +0 -1
- package/dist/entry-fields-BvOLFlJ4.js.map +0 -1
- package/dist/gcp.transport-CHV8MGgz.js.map +0 -1
- package/dist/gcp.transport-DBX5TPIy.mjs.map +0 -1
- package/dist/gcp.transport-m4fVw0b1.d.ts.map +0 -1
- package/dist/gcp.transport-zzNyIoih.d.mts.map +0 -1
- package/dist/index-BPwEisy4.d.mts.map +0 -1
- package/dist/index-nZEeCr3X.d.ts.map +0 -1
- package/dist/internal-log-BUJYMZbE.js +0 -70
- package/dist/internal-log-BUJYMZbE.js.map +0 -1
- package/dist/internal-log-Cm8SOWSV.mjs +0 -52
- package/dist/internal-log-Cm8SOWSV.mjs.map +0 -1
- package/dist/nestjs-extras-DnJ6vrIC.js.map +0 -1
- package/dist/nestjs-extras-ImbuDhs1.mjs.map +0 -1
- package/dist/nestjs-extras-OkC796py.d.mts +0 -725
- package/dist/nestjs-extras-OkC796py.d.mts.map +0 -1
- package/dist/nestjs-extras-mKrHE9S6.d.ts +0 -725
- package/dist/nestjs-extras-mKrHE9S6.d.ts.map +0 -1
- package/dist/safe-stringify-DJ66tW5I.mjs.map +0 -1
- package/dist/safe-stringify-DWo3aZp_.js.map +0 -1
- package/dist/search-B0MH1SJJ.js.map +0 -1
- package/dist/search-BfBzDIT9.d.mts.map +0 -1
- package/dist/search-CHUZPl0h.d.ts.map +0 -1
- package/dist/search-DjXSn6v5.mjs.map +0 -1
- package/dist/trace.utils-CvXgaiQT.mjs.map +0 -1
- package/dist/trace.utils-DpBOLDtq.js.map +0 -1
- package/dist/transport.manager-CpdVHEGP.mjs.map +0 -1
- package/dist/transport.manager-Crau3Rle.js.map +0 -1
- package/dist/transport.types-CtNr3D7S.d.mts.map +0 -1
- package/dist/transport.types-DqVLZTyf.d.ts.map +0 -1
- package/dist/worker.transport-Bgv9heDI.d.mts.map +0 -1
- package/dist/worker.transport-Bj-i0P9V.d.ts.map +0 -1
- package/dist/worker.transport-JP8YHBuU.js.map +0 -1
- package/dist/worker.transport-otwhJ_Et.mjs.map +0 -1
package/dist/index.js
CHANGED
|
@@ -1,18 +1,15 @@
|
|
|
1
|
-
|
|
2
|
-
const
|
|
3
|
-
const
|
|
4
|
-
const
|
|
5
|
-
require(
|
|
6
|
-
const
|
|
7
|
-
const
|
|
8
|
-
const
|
|
9
|
-
const
|
|
10
|
-
const
|
|
11
|
-
const require_search = require('./search-B0MH1SJJ.js');
|
|
1
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
|
+
const require_builder = require("./builder-M7NoaugM.js");
|
|
3
|
+
const require_request_trace = require("./request-trace-wTJdKp6-.js");
|
|
4
|
+
const require_async_context = require("./async-context-DTQgi8f7.js");
|
|
5
|
+
const require_internal_log = require("./internal-log-b0Vp4qrB.js");
|
|
6
|
+
const require_coerce_utils = require("./coerce.utils-C1C5sIX0.js");
|
|
7
|
+
const require_safe_stringify = require("./safe-stringify-DLz1Kz3o.js");
|
|
8
|
+
const require_transport_manager = require("./transport.manager-DkcEOlqV.js");
|
|
9
|
+
const require_slack_transport = require("./slack.transport-Dlx3xvb7.js");
|
|
10
|
+
const require_search = require("./search-DUfWuzFP.js");
|
|
12
11
|
let node_async_hooks = require("node:async_hooks");
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
//#region src/formatters/json.formatter.ts
|
|
12
|
+
// src/formatters/json.formatter.ts
|
|
16
13
|
/**
|
|
17
14
|
* Build a JSON.stringify replacer that replaces circular references with the
|
|
18
15
|
* string '[Circular]' instead of throwing. A fresh replacer must be created per
|
|
@@ -49,7 +46,7 @@ var JsonFormatter = class {
|
|
|
49
46
|
if (this.includeContext && entry.context) formatted.context = entry.context;
|
|
50
47
|
formatted.message = entry.message;
|
|
51
48
|
if (entry.payload && Object.keys(entry.payload).length > 0) formatted.payload = this.serializePayload(entry.payload);
|
|
52
|
-
if (entry.error) formatted.error =
|
|
49
|
+
if (entry.error) formatted.error = require_builder.serializeError(entry.error);
|
|
53
50
|
formatted.meta = {
|
|
54
51
|
pid: process.pid,
|
|
55
52
|
hostname: process.env.HOSTNAME || "unknown",
|
|
@@ -63,7 +60,7 @@ var JsonFormatter = class {
|
|
|
63
60
|
for (const [key, value] of Object.entries(payload)) {
|
|
64
61
|
if (key === "__proto__" || key === "constructor" || key === "prototype") continue;
|
|
65
62
|
try {
|
|
66
|
-
if (value instanceof Error) serialized[key] =
|
|
63
|
+
if (value instanceof Error) serialized[key] = require_builder.serializeError(value);
|
|
67
64
|
else if (value instanceof Date) serialized[key] = value.toISOString();
|
|
68
65
|
else if (typeof value === "function") serialized[key] = "[Function]";
|
|
69
66
|
else if (typeof value === "symbol") serialized[key] = value.toString();
|
|
@@ -76,9 +73,7 @@ var JsonFormatter = class {
|
|
|
76
73
|
return serialized;
|
|
77
74
|
}
|
|
78
75
|
};
|
|
79
|
-
|
|
80
|
-
//#endregion
|
|
81
|
-
//#region src/formatters/text.formatter.ts
|
|
76
|
+
// src/formatters/text.formatter.ts
|
|
82
77
|
const stripControls = (value) => require_transport_manager.stripControlChars(require_coerce_utils.safeToString(value));
|
|
83
78
|
var TextFormatter = class TextFormatter {
|
|
84
79
|
constructor(options = {}) {
|
|
@@ -127,7 +122,7 @@ var TextFormatter = class TextFormatter {
|
|
|
127
122
|
parts.push(`[${context}]`);
|
|
128
123
|
}
|
|
129
124
|
const safeMessage = stripControls(entry.message);
|
|
130
|
-
const message = this.colorize && entry.level ===
|
|
125
|
+
const message = this.colorize && entry.level === require_builder.LogLevel.ERROR ? `${this.colors.error}${safeMessage}${this.colors.reset}` : safeMessage;
|
|
131
126
|
parts.push(message);
|
|
132
127
|
if (entry.payload && Object.keys(entry.payload).length > 0) {
|
|
133
128
|
const payload = this.formatPayload(entry.payload);
|
|
@@ -140,7 +135,6 @@ var TextFormatter = class TextFormatter {
|
|
|
140
135
|
switch (this.timestampFormat) {
|
|
141
136
|
case "iso": return date.toISOString();
|
|
142
137
|
case "short": return date.toLocaleTimeString();
|
|
143
|
-
case "locale":
|
|
144
138
|
default: return date.toLocaleString();
|
|
145
139
|
}
|
|
146
140
|
}
|
|
@@ -198,9 +192,7 @@ var TextFormatter = class TextFormatter {
|
|
|
198
192
|
});
|
|
199
193
|
}
|
|
200
194
|
};
|
|
201
|
-
|
|
202
|
-
//#endregion
|
|
203
|
-
//#region src/utils/runtime-control.ts
|
|
195
|
+
// src/utils/runtime-control.ts
|
|
204
196
|
const DEFAULT_CYCLE = [
|
|
205
197
|
"error",
|
|
206
198
|
"warn",
|
|
@@ -217,13 +209,14 @@ const DEFAULT_CYCLE = [
|
|
|
217
209
|
* memorizable command (`kill -USR2 <pid>`) is enough to ratchet verbosity up
|
|
218
210
|
* while chasing a bug and back down again — no value to remember.
|
|
219
211
|
*/
|
|
220
|
-
function registerLevelSignal(logger
|
|
212
|
+
function registerLevelSignal(logger, options = {}) {
|
|
221
213
|
const signal = options.signal ?? "SIGUSR2";
|
|
222
214
|
const cycle = options.cycle && options.cycle.length > 0 ? options.cycle : [...DEFAULT_CYCLE];
|
|
223
215
|
const handler = () => {
|
|
224
|
-
const current = logger
|
|
225
|
-
const
|
|
226
|
-
|
|
216
|
+
const current = logger.getLevel();
|
|
217
|
+
const idx = cycle.indexOf(current);
|
|
218
|
+
const next = cycle[(idx + 1) % cycle.length];
|
|
219
|
+
logger.setLevel(next);
|
|
227
220
|
require_internal_log.internalLog(`runtime level changed via ${signal}: ${current} → ${next}`);
|
|
228
221
|
};
|
|
229
222
|
process.on(signal, handler);
|
|
@@ -232,7 +225,7 @@ function registerLevelSignal(logger$1, options = {}) {
|
|
|
232
225
|
};
|
|
233
226
|
}
|
|
234
227
|
/** Maximum accepted request body size for the level control handler. */
|
|
235
|
-
const MAX_BODY_BYTES =
|
|
228
|
+
const MAX_BODY_BYTES = 16384;
|
|
236
229
|
function isJsonContentType(req) {
|
|
237
230
|
var _req$headers;
|
|
238
231
|
const raw = (_req$headers = req.headers) === null || _req$headers === void 0 ? void 0 : _req$headers["content-type"];
|
|
@@ -240,7 +233,7 @@ function isJsonContentType(req) {
|
|
|
240
233
|
if (typeof value !== "string") return false;
|
|
241
234
|
return value.split(";")[0].trim().toLowerCase() === "application/json";
|
|
242
235
|
}
|
|
243
|
-
const VALID_LEVELS = new Set([
|
|
236
|
+
const VALID_LEVELS = /* @__PURE__ */ new Set([
|
|
244
237
|
"error",
|
|
245
238
|
"warn",
|
|
246
239
|
"info",
|
|
@@ -269,13 +262,13 @@ const VALID_LEVELS = new Set([
|
|
|
269
262
|
* which also keeps cross-site form posts out) and a body of at most 16 KB
|
|
270
263
|
* (otherwise 413).
|
|
271
264
|
*/
|
|
272
|
-
function createLevelControlHandler(logger
|
|
265
|
+
function createLevelControlHandler(logger, options = {}) {
|
|
273
266
|
const allowed = options.allowedLevels && options.allowedLevels.length > 0 ? new Set(options.allowedLevels.map((l) => l.toLowerCase())) : VALID_LEVELS;
|
|
274
267
|
const snapshot = () => {
|
|
275
268
|
var _logger$getNamespaceL;
|
|
276
269
|
return {
|
|
277
|
-
level: logger
|
|
278
|
-
namespaceLevels: ((_logger$getNamespaceL = logger
|
|
270
|
+
level: logger.getLevel(),
|
|
271
|
+
namespaceLevels: ((_logger$getNamespaceL = logger.getNamespaceLevels) === null || _logger$getNamespaceL === void 0 ? void 0 : _logger$getNamespaceL.call(logger)) ?? {}
|
|
279
272
|
};
|
|
280
273
|
};
|
|
281
274
|
const send = (res, status, body) => {
|
|
@@ -301,7 +294,7 @@ function createLevelControlHandler(logger$1, options = {}) {
|
|
|
301
294
|
});
|
|
302
295
|
return;
|
|
303
296
|
}
|
|
304
|
-
logger
|
|
297
|
+
logger.setLevel(lvl);
|
|
305
298
|
}
|
|
306
299
|
if (parsed.namespaceLevels !== void 0) {
|
|
307
300
|
if (typeof parsed.namespaceLevels !== "object" || parsed.namespaceLevels === null || Array.isArray(parsed.namespaceLevels)) {
|
|
@@ -313,9 +306,9 @@ function createLevelControlHandler(logger$1, options = {}) {
|
|
|
313
306
|
send(res, 400, { error: `unknown level "${String(lvl)}" for namespace "${pat}"` });
|
|
314
307
|
return;
|
|
315
308
|
}
|
|
316
|
-
if (logger
|
|
309
|
+
if (logger.setNamespaceLevels) {
|
|
317
310
|
const coerced = Object.fromEntries(Object.entries(nl).map(([pat, lvl]) => [pat, String(lvl).toLowerCase()]));
|
|
318
|
-
logger
|
|
311
|
+
logger.setNamespaceLevels(coerced);
|
|
319
312
|
} else require_internal_log.internalWarn("level control: logger does not support setNamespaceLevels — ignored");
|
|
320
313
|
}
|
|
321
314
|
send(res, 200, snapshot());
|
|
@@ -377,9 +370,54 @@ function createLevelControlHandler(logger$1, options = {}) {
|
|
|
377
370
|
send(res, 405, { error: `method ${method} not allowed` });
|
|
378
371
|
};
|
|
379
372
|
}
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
373
|
+
// src/utils/typed-logger.ts
|
|
374
|
+
/**
|
|
375
|
+
* logixia — TypeScript typed log fields
|
|
376
|
+
*
|
|
377
|
+
* Solves the type-safety gap: standard `Record<string, unknown>` metadata gives
|
|
378
|
+
* zero IDE autocomplete and lets typos slip silently into production logs.
|
|
379
|
+
*
|
|
380
|
+
* Two complementary utilities:
|
|
381
|
+
*
|
|
382
|
+
* 1. `createTypedLogger<TFields>()` — wraps any IBaseLogger so that the second
|
|
383
|
+
* argument of every log method is constrained to `TFields` (a typed object).
|
|
384
|
+
* Compile-time safety, zero runtime overhead.
|
|
385
|
+
*
|
|
386
|
+
* 2. `defineLogSchema<TFields>(schema)` — declares expected fields with optional
|
|
387
|
+
* validators. In development (NODE_ENV !== 'production') every log call is
|
|
388
|
+
* validated against the schema and a warning is emitted for missing required
|
|
389
|
+
* fields or type mismatches.
|
|
390
|
+
*
|
|
391
|
+
* @example
|
|
392
|
+
* ```ts
|
|
393
|
+
* import { createTypedLogger, defineLogSchema } from 'logixia';
|
|
394
|
+
*
|
|
395
|
+
* interface OrderFields {
|
|
396
|
+
* orderId: string;
|
|
397
|
+
* userId: string;
|
|
398
|
+
* amount?: number;
|
|
399
|
+
* currency?: string;
|
|
400
|
+
* }
|
|
401
|
+
*
|
|
402
|
+
* const schema = defineLogSchema<OrderFields>({
|
|
403
|
+
* orderId: { type: 'string', required: true },
|
|
404
|
+
* userId: { type: 'string', required: true },
|
|
405
|
+
* amount: { type: 'number' },
|
|
406
|
+
* currency: { type: 'string' },
|
|
407
|
+
* });
|
|
408
|
+
*
|
|
409
|
+
* const orderLogger = createTypedLogger<OrderFields>(baseLogger, schema);
|
|
410
|
+
* await orderLogger.info('Order created', { orderId: 'ord_123', userId: 'usr_456', amount: 99.99 });
|
|
411
|
+
* // ^^^^ fully typed autocomplete ^^^^
|
|
412
|
+
* ```
|
|
413
|
+
*/
|
|
414
|
+
function isProduction() {
|
|
415
|
+
try {
|
|
416
|
+
return process.env.NODE_ENV === "production";
|
|
417
|
+
} catch {
|
|
418
|
+
return false;
|
|
419
|
+
}
|
|
420
|
+
}
|
|
383
421
|
/**
|
|
384
422
|
* Define a typed schema for a category of log entries.
|
|
385
423
|
*
|
|
@@ -390,7 +428,7 @@ function defineLogSchema(fields) {
|
|
|
390
428
|
return {
|
|
391
429
|
fields,
|
|
392
430
|
validate(payload) {
|
|
393
|
-
if (
|
|
431
|
+
if (isProduction()) return [];
|
|
394
432
|
const warnings = [];
|
|
395
433
|
for (const [key, def] of Object.entries(fields)) {
|
|
396
434
|
const value = payload[key];
|
|
@@ -417,7 +455,7 @@ function defineLogSchema(fields) {
|
|
|
417
455
|
* @param logger Any object that implements `IBaseLogger` (e.g. the result of `createLogger()`)
|
|
418
456
|
* @param schema Optional schema for dev-time validation. Created with `defineLogSchema()`.
|
|
419
457
|
*/
|
|
420
|
-
function createTypedLogger(logger
|
|
458
|
+
function createTypedLogger(logger, schema) {
|
|
421
459
|
function withValidation(level, fn, message, data) {
|
|
422
460
|
if (schema && data) {
|
|
423
461
|
const warnings = schema.validate(data);
|
|
@@ -426,25 +464,56 @@ function createTypedLogger(logger$1, schema) {
|
|
|
426
464
|
return fn(message, data);
|
|
427
465
|
}
|
|
428
466
|
return {
|
|
429
|
-
raw: logger
|
|
467
|
+
raw: logger,
|
|
430
468
|
error(messageOrError, data) {
|
|
431
469
|
if (schema && data) {
|
|
432
470
|
const warnings = schema.validate(data);
|
|
433
471
|
const display = messageOrError instanceof Error ? messageOrError.message : messageOrError;
|
|
434
472
|
for (const w of warnings) require_internal_log.internalWarn(`[logixia/schema] ${w} — level=error message="${display}"`);
|
|
435
473
|
}
|
|
436
|
-
return logger
|
|
474
|
+
return logger.error(messageOrError, data);
|
|
437
475
|
},
|
|
438
|
-
warn: (m, d) => withValidation("warn", logger
|
|
439
|
-
info: (m, d) => withValidation("info", logger
|
|
440
|
-
debug: (m, d) => withValidation("debug", logger
|
|
441
|
-
verbose: (m, d) => withValidation("verbose", (logger
|
|
442
|
-
trace: (m, d) => withValidation("trace", (logger
|
|
476
|
+
warn: (m, d) => withValidation("warn", logger.warn.bind(logger), m, d),
|
|
477
|
+
info: (m, d) => withValidation("info", logger.info.bind(logger), m, d),
|
|
478
|
+
debug: (m, d) => withValidation("debug", logger.debug.bind(logger), m, d),
|
|
479
|
+
verbose: (m, d) => withValidation("verbose", (logger.verbose ?? logger.debug).bind(logger), m, d),
|
|
480
|
+
trace: (m, d) => withValidation("trace", (logger.trace ?? logger.debug).bind(logger), m, d)
|
|
443
481
|
};
|
|
444
482
|
}
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
483
|
+
// src/wide-events.ts
|
|
484
|
+
/**
|
|
485
|
+
* logixia — Canonical Log Lines / Wide Events.
|
|
486
|
+
*
|
|
487
|
+
* Emit ONE dense, structured event per unit of work (usually a request) instead
|
|
488
|
+
* of scattering details across many narrow log lines. Fields are accumulated as
|
|
489
|
+
* the request flows through middleware and business logic, then the whole event
|
|
490
|
+
* is emitted ONCE — in a `finally`/teardown path so it fires even on errors.
|
|
491
|
+
*
|
|
492
|
+
* This is the "canonical log line" pattern (Stripe) / "wide events" /
|
|
493
|
+
* "Observability 2.0" (Honeycomb): one pre-joined, queryable record per request,
|
|
494
|
+
* so operators never JOIN across log lines during an incident. It composes with
|
|
495
|
+
* logixia's existing trace correlation — when a trace is active, the event
|
|
496
|
+
* carries `traceId`/`spanId`, making it OTel-friendly.
|
|
497
|
+
*
|
|
498
|
+
* @example Manual scope
|
|
499
|
+
* ```ts
|
|
500
|
+
* import { withWideEvent, addEventFields } from 'logixia';
|
|
501
|
+
*
|
|
502
|
+
* await withWideEvent(logger, { route: '/checkout' }, async () => {
|
|
503
|
+
* addEventFields({ userId, planTier }); // from anywhere in the call tree
|
|
504
|
+
* addEventFields({ dbQueries: 4, cacheHit });
|
|
505
|
+
* // ...one wide event is emitted automatically when this callback settles,
|
|
506
|
+
* // even if it throws.
|
|
507
|
+
* });
|
|
508
|
+
* ```
|
|
509
|
+
*
|
|
510
|
+
* @example Express middleware (auto-emit on response finish/close)
|
|
511
|
+
* ```ts
|
|
512
|
+
* import { wideEventMiddleware } from 'logixia';
|
|
513
|
+
* app.use(wideEventMiddleware(logger));
|
|
514
|
+
* app.get('/x', (req, res) => { addEventFields({ handled: 'x' }); res.json({}); });
|
|
515
|
+
* ```
|
|
516
|
+
*/
|
|
448
517
|
const _storage = new node_async_hooks.AsyncLocalStorage();
|
|
449
518
|
/**
|
|
450
519
|
* Merge fields into the wide event for the current async scope. No-op (with no
|
|
@@ -465,7 +534,7 @@ function getEventFields() {
|
|
|
465
534
|
const state = _storage.getStore();
|
|
466
535
|
return state ? { ...state.fields } : void 0;
|
|
467
536
|
}
|
|
468
|
-
function emit(logger
|
|
537
|
+
function emit(logger, state, options, extra) {
|
|
469
538
|
if (state.emitted) return;
|
|
470
539
|
state.emitted = true;
|
|
471
540
|
const level = options.level ?? "info";
|
|
@@ -476,10 +545,10 @@ function emit(logger$1, state, options, extra) {
|
|
|
476
545
|
if (extra) Object.assign(payload, extra);
|
|
477
546
|
payload[durationField] = Date.now() - state.startMs;
|
|
478
547
|
if (includeTrace) {
|
|
479
|
-
const traceId =
|
|
548
|
+
const traceId = require_request_trace.getCurrentTraceId();
|
|
480
549
|
if (traceId !== void 0 && payload["traceId"] === void 0) payload["traceId"] = traceId;
|
|
481
550
|
}
|
|
482
|
-
const p = logger
|
|
551
|
+
const p = logger.logLevel(level, message, payload);
|
|
483
552
|
if (p && typeof p.catch === "function") p.catch(() => {});
|
|
484
553
|
}
|
|
485
554
|
/**
|
|
@@ -488,7 +557,7 @@ function emit(logger$1, state, options, extra) {
|
|
|
488
557
|
* when the callback settles — on success OR error (the canonical "emit in
|
|
489
558
|
* finally" guarantee). On error, `error` + `errorMessage` fields are added.
|
|
490
559
|
*/
|
|
491
|
-
async function withWideEvent(logger
|
|
560
|
+
async function withWideEvent(logger, initialFields, callback, options = {}) {
|
|
492
561
|
const state = {
|
|
493
562
|
fields: { ...initialFields },
|
|
494
563
|
startMs: Date.now(),
|
|
@@ -497,10 +566,10 @@ async function withWideEvent(logger$1, initialFields, callback, options = {}) {
|
|
|
497
566
|
return _storage.run(state, async () => {
|
|
498
567
|
try {
|
|
499
568
|
const result = await callback();
|
|
500
|
-
emit(logger
|
|
569
|
+
emit(logger, state, options);
|
|
501
570
|
return result;
|
|
502
571
|
} catch (error) {
|
|
503
|
-
emit(logger
|
|
572
|
+
emit(logger, state, options, {
|
|
504
573
|
error: true,
|
|
505
574
|
errorMessage: error instanceof Error ? error.message : String(error)
|
|
506
575
|
});
|
|
@@ -515,7 +584,7 @@ async function withWideEvent(logger$1, initialFields, callback, options = {}) {
|
|
|
515
584
|
* more via `addEventFields`. The completion event includes `statusCode` and the
|
|
516
585
|
* request duration.
|
|
517
586
|
*/
|
|
518
|
-
function wideEventMiddleware(logger
|
|
587
|
+
function wideEventMiddleware(logger, options = {}) {
|
|
519
588
|
return function logixiaWideEventMiddleware(req, res, next) {
|
|
520
589
|
var _options$skip, _req$socket, _res$once, _res$once2;
|
|
521
590
|
if ((_options$skip = options.skip) === null || _options$skip === void 0 ? void 0 : _options$skip.call(options, req)) {
|
|
@@ -533,192 +602,14 @@ function wideEventMiddleware(logger$1, options = {}) {
|
|
|
533
602
|
emitted: false
|
|
534
603
|
};
|
|
535
604
|
const finalize = () => {
|
|
536
|
-
emit(logger
|
|
605
|
+
emit(logger, state, options, { statusCode: res.statusCode ?? 0 });
|
|
537
606
|
};
|
|
538
607
|
(_res$once = res.once) === null || _res$once === void 0 || _res$once.call(res, "finish", finalize);
|
|
539
608
|
(_res$once2 = res.once) === null || _res$once2 === void 0 || _res$once2.call(res, "close", finalize);
|
|
540
609
|
_storage.run(state, () => next());
|
|
541
610
|
};
|
|
542
611
|
}
|
|
543
|
-
|
|
544
|
-
//#endregion
|
|
545
|
-
//#region src/transports/otlp.transport.ts
|
|
546
|
-
const HEX_32 = /^[0-9a-f]{32}$/;
|
|
547
|
-
/**
|
|
548
|
-
* OTLP JSON wants a 32-char lowercase hex trace id. Dashed UUIDs are
|
|
549
|
-
* normalised; anything else (or all zeros) returns undefined.
|
|
550
|
-
*/
|
|
551
|
-
function toOtlpTraceId(id) {
|
|
552
|
-
const hex = id.replace(/-/g, "").toLowerCase();
|
|
553
|
-
return HEX_32.test(hex) && hex !== "0".repeat(32) ? hex : void 0;
|
|
554
|
-
}
|
|
555
|
-
/**
|
|
556
|
-
* Map a logixia level name to an OTel SeverityNumber (1–24) and text.
|
|
557
|
-
* Per the OTel logs SDK spec: TRACE=1, DEBUG=5, INFO=9, WARN=13, ERROR=17,
|
|
558
|
-
* FATAL=21. Custom/unknown levels fall back to INFO (9).
|
|
559
|
-
*/
|
|
560
|
-
function toOtelSeverity(level) {
|
|
561
|
-
switch (level.toLowerCase()) {
|
|
562
|
-
case "trace": return {
|
|
563
|
-
number: 1,
|
|
564
|
-
text: "TRACE"
|
|
565
|
-
};
|
|
566
|
-
case "verbose": return {
|
|
567
|
-
number: 5,
|
|
568
|
-
text: "DEBUG"
|
|
569
|
-
};
|
|
570
|
-
case "debug": return {
|
|
571
|
-
number: 5,
|
|
572
|
-
text: "DEBUG"
|
|
573
|
-
};
|
|
574
|
-
case "info": return {
|
|
575
|
-
number: 9,
|
|
576
|
-
text: "INFO"
|
|
577
|
-
};
|
|
578
|
-
case "warn":
|
|
579
|
-
case "warning": return {
|
|
580
|
-
number: 13,
|
|
581
|
-
text: "WARN"
|
|
582
|
-
};
|
|
583
|
-
case "error": return {
|
|
584
|
-
number: 17,
|
|
585
|
-
text: "ERROR"
|
|
586
|
-
};
|
|
587
|
-
case "fatal": return {
|
|
588
|
-
number: 21,
|
|
589
|
-
text: "FATAL"
|
|
590
|
-
};
|
|
591
|
-
default: return {
|
|
592
|
-
number: 9,
|
|
593
|
-
text: "INFO"
|
|
594
|
-
};
|
|
595
|
-
}
|
|
596
|
-
}
|
|
597
|
-
/** Coerce a JS value into an OTLP AnyValue. */
|
|
598
|
-
function toAnyValue(value) {
|
|
599
|
-
if (typeof value === "string") return { stringValue: value };
|
|
600
|
-
if (typeof value === "boolean") return { boolValue: value };
|
|
601
|
-
if (typeof value === "number") return Number.isInteger(value) ? { intValue: value } : { doubleValue: value };
|
|
602
|
-
if (typeof value === "bigint") return { stringValue: value.toString() };
|
|
603
|
-
if (value === null || value === void 0) return { stringValue: "" };
|
|
604
|
-
try {
|
|
605
|
-
return { stringValue: require_safe_stringify.stringifyForLog(value) };
|
|
606
|
-
} catch {
|
|
607
|
-
return { stringValue: String(value) };
|
|
608
|
-
}
|
|
609
|
-
}
|
|
610
|
-
/** Build the OTLP KeyValue attribute list from a flat record. */
|
|
611
|
-
function toAttributes(rec) {
|
|
612
|
-
return Object.entries(rec).map(([key, value]) => ({
|
|
613
|
-
key,
|
|
614
|
-
value: toAnyValue(value)
|
|
615
|
-
}));
|
|
616
|
-
}
|
|
617
|
-
var OtlpLogTransport = class {
|
|
618
|
-
constructor(config) {
|
|
619
|
-
this.name = "otlp";
|
|
620
|
-
this.flushTimer = null;
|
|
621
|
-
this.url = config.url;
|
|
622
|
-
this.headers = config.headers ?? {};
|
|
623
|
-
this.batchSize = config.batchSize ?? 100;
|
|
624
|
-
this.flushIntervalMs = config.flushIntervalMs ?? 5e3;
|
|
625
|
-
this.requestTimeoutMs = config.requestTimeoutMs ?? require_batch_buffer.DEFAULT_REQUEST_TIMEOUT_MS;
|
|
626
|
-
this.level = config.level;
|
|
627
|
-
this.buffer = new require_batch_buffer.BatchBuffer({
|
|
628
|
-
name: "OtlpLogTransport",
|
|
629
|
-
batchSize: this.batchSize,
|
|
630
|
-
maxBufferSize: config.maxBufferSize ?? require_batch_buffer.DEFAULT_MAX_BUFFER_SIZE,
|
|
631
|
-
send: (entries) => this.send(entries)
|
|
632
|
-
});
|
|
633
|
-
this.resourceAttrs = toAttributes({
|
|
634
|
-
"service.name": config.serviceName ?? "logixia",
|
|
635
|
-
...config.serviceVersion ? { "service.version": config.serviceVersion } : {},
|
|
636
|
-
...config.environment ? { "deployment.environment": config.environment } : {},
|
|
637
|
-
...config.resourceAttributes ?? {}
|
|
638
|
-
});
|
|
639
|
-
this.flushTimer = setInterval(() => {
|
|
640
|
-
this.flush().catch(() => {});
|
|
641
|
-
}, this.flushIntervalMs);
|
|
642
|
-
if (this.flushTimer.unref) this.flushTimer.unref();
|
|
643
|
-
}
|
|
644
|
-
write(entry) {
|
|
645
|
-
this.buffer.push(entry);
|
|
646
|
-
this.buffer.flushIfFull();
|
|
647
|
-
}
|
|
648
|
-
/** Convert one entry into an OTLP LogRecord. */
|
|
649
|
-
toLogRecord(entry) {
|
|
650
|
-
const sev = toOtelSeverity(entry.level);
|
|
651
|
-
const tsNanos = String(entry.timestamp.getTime() * 1e6);
|
|
652
|
-
const attrs = { ...entry.data ?? {} };
|
|
653
|
-
if (entry.context !== void 0) attrs["context"] = entry.context;
|
|
654
|
-
if (entry.appName !== void 0) attrs["app.name"] = entry.appName;
|
|
655
|
-
if (entry.environment !== void 0) attrs["deployment.environment"] = entry.environment;
|
|
656
|
-
const record = {
|
|
657
|
-
timeUnixNano: tsNanos,
|
|
658
|
-
observedTimeUnixNano: tsNanos,
|
|
659
|
-
severityNumber: sev.number,
|
|
660
|
-
severityText: sev.text,
|
|
661
|
-
body: { stringValue: entry.message },
|
|
662
|
-
attributes: toAttributes(attrs)
|
|
663
|
-
};
|
|
664
|
-
if (entry.traceId) {
|
|
665
|
-
const traceId = toOtlpTraceId(entry.traceId);
|
|
666
|
-
if (traceId) record["traceId"] = traceId;
|
|
667
|
-
else record["attributes"].push({
|
|
668
|
-
key: "trace_id",
|
|
669
|
-
value: { stringValue: entry.traceId }
|
|
670
|
-
});
|
|
671
|
-
}
|
|
672
|
-
return record;
|
|
673
|
-
}
|
|
674
|
-
buildPayload(entries) {
|
|
675
|
-
return require_safe_stringify.stringifyForLog({ resourceLogs: [{
|
|
676
|
-
resource: { attributes: this.resourceAttrs },
|
|
677
|
-
scopeLogs: [{
|
|
678
|
-
scope: { name: "logixia" },
|
|
679
|
-
logRecords: entries.map((e) => this.toLogRecord(e))
|
|
680
|
-
}]
|
|
681
|
-
}] });
|
|
682
|
-
}
|
|
683
|
-
flush() {
|
|
684
|
-
return this.buffer.flush();
|
|
685
|
-
}
|
|
686
|
-
async send(entries) {
|
|
687
|
-
if (typeof fetch !== "function") {
|
|
688
|
-
require_internal_log.internalWarn("OtlpLogTransport: global fetch unavailable — cannot export logs");
|
|
689
|
-
return;
|
|
690
|
-
}
|
|
691
|
-
const controller = new AbortController();
|
|
692
|
-
const timer = setTimeout(() => controller.abort(), this.requestTimeoutMs);
|
|
693
|
-
try {
|
|
694
|
-
const res = await fetch(this.url, {
|
|
695
|
-
method: "POST",
|
|
696
|
-
headers: {
|
|
697
|
-
"Content-Type": "application/json",
|
|
698
|
-
...this.headers
|
|
699
|
-
},
|
|
700
|
-
body: this.buildPayload(entries),
|
|
701
|
-
signal: controller.signal
|
|
702
|
-
});
|
|
703
|
-
if (!res.ok) throw new require_batch_buffer.HttpError(res.status, "", "OTLP export");
|
|
704
|
-
} catch (err) {
|
|
705
|
-
if (controller.signal.aborted) throw new Error(`OTLP export timed out after ${this.requestTimeoutMs}ms`, { cause: err });
|
|
706
|
-
throw err;
|
|
707
|
-
} finally {
|
|
708
|
-
clearTimeout(timer);
|
|
709
|
-
}
|
|
710
|
-
}
|
|
711
|
-
async close() {
|
|
712
|
-
if (this.flushTimer) {
|
|
713
|
-
clearInterval(this.flushTimer);
|
|
714
|
-
this.flushTimer = null;
|
|
715
|
-
}
|
|
716
|
-
await this.buffer.close();
|
|
717
|
-
}
|
|
718
|
-
};
|
|
719
|
-
|
|
720
|
-
//#endregion
|
|
721
|
-
//#region src/metrics.ts
|
|
612
|
+
// src/metrics.ts
|
|
722
613
|
const DEFAULT_BUCKETS = [
|
|
723
614
|
1,
|
|
724
615
|
5,
|
|
@@ -860,9 +751,10 @@ var MetricsPlugin = class {
|
|
|
860
751
|
const helpText = config.help ?? rawName.replace(/_/g, " ");
|
|
861
752
|
lines.push(`# HELP ${metricName} ${helpText}`);
|
|
862
753
|
lines.push(`# TYPE ${metricName} ${config.type}`);
|
|
863
|
-
if (state.type === "counter")
|
|
864
|
-
|
|
865
|
-
|
|
754
|
+
if (state.type === "counter") {
|
|
755
|
+
if (state.values.size === 0) lines.push(`${metricName} 0`);
|
|
756
|
+
else for (const [labelKey, count] of state.values) lines.push(`${metricName}${renderLabels(labelKey)} ${count}`);
|
|
757
|
+
} else if (state.type === "histogram") for (const [labelKey, bucketCounts] of state.counts) {
|
|
866
758
|
const labelSuffix = renderLabels(labelKey);
|
|
867
759
|
const baseObj = labelKey === "{}" ? {} : JSON.parse(labelKey);
|
|
868
760
|
for (let i = 0; i < state.buckets.length; i++) {
|
|
@@ -880,8 +772,10 @@ var MetricsPlugin = class {
|
|
|
880
772
|
lines.push(`${metricName}_sum${labelSuffix} ${state.sums.get(labelKey) ?? 0}`);
|
|
881
773
|
lines.push(`${metricName}_count${labelSuffix} ${state.observations.get(labelKey) ?? 0}`);
|
|
882
774
|
}
|
|
883
|
-
else if (state.type === "gauge")
|
|
884
|
-
|
|
775
|
+
else if (state.type === "gauge") {
|
|
776
|
+
if (state.values.size === 0) lines.push(`${metricName} 0`);
|
|
777
|
+
else for (const [labelKey, val] of state.values) lines.push(`${metricName}${renderLabels(labelKey)} ${val}`);
|
|
778
|
+
}
|
|
885
779
|
}
|
|
886
780
|
return `${lines.join("\n")}\n`;
|
|
887
781
|
}
|
|
@@ -998,184 +892,105 @@ var MetricsPlugin = class {
|
|
|
998
892
|
function createMetricsPlugin(map, options) {
|
|
999
893
|
return new MetricsPlugin(map, options);
|
|
1000
894
|
}
|
|
1001
|
-
|
|
1002
|
-
//#endregion
|
|
1003
|
-
//#region src/index.ts
|
|
895
|
+
// src/index.ts
|
|
1004
896
|
/**
|
|
1005
|
-
*
|
|
897
|
+
* Logixia - Advanced TypeScript Logger
|
|
898
|
+
*
|
|
899
|
+
* A comprehensive logging library with support for:
|
|
900
|
+
* - Multiple output formats (console, file, JSON)
|
|
901
|
+
* - Trace ID tracking
|
|
902
|
+
* - Performance monitoring
|
|
903
|
+
* - NestJS integration
|
|
904
|
+
* - Customizable log levels and colors
|
|
905
|
+
* - Intelligent log search and aggregation
|
|
906
|
+
* - Natural language query processing
|
|
907
|
+
* - Pattern recognition and anomaly detection
|
|
1006
908
|
*/
|
|
1007
|
-
const DEFAULT_CONFIG = {
|
|
1008
|
-
appName: "App",
|
|
1009
|
-
environment: "development",
|
|
1010
|
-
traceId: true,
|
|
1011
|
-
format: {
|
|
1012
|
-
timestamp: true,
|
|
1013
|
-
colorize: true,
|
|
1014
|
-
json: false
|
|
1015
|
-
},
|
|
1016
|
-
silent: false,
|
|
1017
|
-
levelOptions: {
|
|
1018
|
-
level: require_nestjs_extras.LogLevel.INFO,
|
|
1019
|
-
levels: {
|
|
1020
|
-
[require_nestjs_extras.LogLevel.ERROR]: 0,
|
|
1021
|
-
[require_nestjs_extras.LogLevel.WARN]: 1,
|
|
1022
|
-
[require_nestjs_extras.LogLevel.INFO]: 2,
|
|
1023
|
-
[require_nestjs_extras.LogLevel.DEBUG]: 3,
|
|
1024
|
-
[require_nestjs_extras.LogLevel.TRACE]: 4,
|
|
1025
|
-
[require_nestjs_extras.LogLevel.VERBOSE]: 5
|
|
1026
|
-
},
|
|
1027
|
-
colors: {
|
|
1028
|
-
[require_nestjs_extras.LogLevel.ERROR]: "red",
|
|
1029
|
-
[require_nestjs_extras.LogLevel.WARN]: "yellow",
|
|
1030
|
-
[require_nestjs_extras.LogLevel.INFO]: "blue",
|
|
1031
|
-
[require_nestjs_extras.LogLevel.DEBUG]: "green",
|
|
1032
|
-
[require_nestjs_extras.LogLevel.TRACE]: "gray",
|
|
1033
|
-
[require_nestjs_extras.LogLevel.VERBOSE]: "cyan"
|
|
1034
|
-
}
|
|
1035
|
-
},
|
|
1036
|
-
fields: {
|
|
1037
|
-
timestamp: true,
|
|
1038
|
-
level: true,
|
|
1039
|
-
appName: true,
|
|
1040
|
-
traceId: true,
|
|
1041
|
-
message: true,
|
|
1042
|
-
payload: true,
|
|
1043
|
-
timeTaken: true
|
|
1044
|
-
},
|
|
1045
|
-
outputs: ["console"]
|
|
1046
|
-
};
|
|
1047
909
|
/**
|
|
1048
910
|
* Create a new Logixia logger instance with TypeScript support for custom levels
|
|
1049
911
|
* @param config - Logger configuration
|
|
1050
912
|
* @returns Typed logger instance
|
|
1051
913
|
*/
|
|
1052
|
-
const createLogger =
|
|
1053
|
-
/**
|
|
1054
|
-
* Create a new Logixia logger service for NestJS
|
|
1055
|
-
* @param config - Logger configuration
|
|
1056
|
-
* @returns LogixiaLoggerService instance
|
|
1057
|
-
*/
|
|
1058
|
-
function createLoggerService(config) {
|
|
1059
|
-
return new require_nestjs_extras.LogixiaLoggerService({
|
|
1060
|
-
...DEFAULT_CONFIG,
|
|
1061
|
-
...config
|
|
1062
|
-
});
|
|
1063
|
-
}
|
|
914
|
+
const createLogger = require_builder.createLogger;
|
|
1064
915
|
/**
|
|
1065
916
|
* Default logger instance
|
|
1066
917
|
*/
|
|
1067
|
-
const logger = new
|
|
918
|
+
const logger = new require_builder.LogixiaLogger(require_builder.DEFAULT_CONFIG);
|
|
1068
919
|
/**
|
|
1069
920
|
* Export default configuration for reference
|
|
1070
921
|
*/
|
|
1071
|
-
|
|
1072
|
-
//#endregion
|
|
1073
922
|
exports.BasicLogIndexer = require_search.BasicLogIndexer;
|
|
1074
923
|
exports.BasicSearchEngine = require_search.BasicSearchEngine;
|
|
1075
924
|
exports.CorrelationEngine = require_search.CorrelationEngine;
|
|
1076
|
-
exports.DEFAULT_CONFIG = DEFAULT_CONFIG;
|
|
1077
|
-
exports.DEFAULT_LOG_COLORS =
|
|
1078
|
-
exports.DEFAULT_LOG_LEVELS =
|
|
1079
|
-
exports.DEFAULT_TRACE_HEADERS =
|
|
1080
|
-
exports.
|
|
1081
|
-
exports.
|
|
925
|
+
exports.DEFAULT_CONFIG = require_builder.DEFAULT_CONFIG;
|
|
926
|
+
exports.DEFAULT_LOG_COLORS = require_builder.DEFAULT_LOG_COLORS;
|
|
927
|
+
exports.DEFAULT_LOG_LEVELS = require_builder.DEFAULT_LOG_LEVELS;
|
|
928
|
+
exports.DEFAULT_TRACE_HEADERS = require_request_trace.DEFAULT_TRACE_HEADERS;
|
|
929
|
+
exports.DiscordTransport = require_slack_transport.DiscordTransport;
|
|
930
|
+
exports.ErrorResponseBuilder = require_builder.ErrorResponseBuilder;
|
|
1082
931
|
exports.JsonFormatter = JsonFormatter;
|
|
1083
|
-
|
|
1084
|
-
enumerable: true,
|
|
1085
|
-
get: function () {
|
|
1086
|
-
return require_nestjs_extras.KafkaTraceInterceptor;
|
|
1087
|
-
}
|
|
1088
|
-
});
|
|
1089
|
-
exports.LOGIXIA_EXCEPTION_FILTER_OPTIONS = require_nestjs_extras.LOGIXIA_EXCEPTION_FILTER_OPTIONS;
|
|
1090
|
-
exports.LOGIXIA_LOGGER_CONFIG = require_nestjs_extras.LOGIXIA_LOGGER_CONFIG;
|
|
1091
|
-
exports.LOGIXIA_LOGGER_PREFIX = require_nestjs_extras.LOGIXIA_LOGGER_PREFIX;
|
|
1092
|
-
exports.LOGIXIA_TRACE_CONFIG = require_nestjs_extras.LOGIXIA_TRACE_CONFIG;
|
|
1093
|
-
exports.LogLevel = require_nestjs_extras.LogLevel;
|
|
1094
|
-
exports.LogMethod = require_nestjs_extras.LogMethod;
|
|
932
|
+
exports.LogLevel = require_builder.LogLevel;
|
|
1095
933
|
exports.LogixiaContext = require_async_context.LogixiaContext;
|
|
1096
|
-
exports.LogixiaException =
|
|
1097
|
-
|
|
1098
|
-
|
|
1099
|
-
get: function () {
|
|
1100
|
-
return require_nestjs_extras.LogixiaExceptionFilter;
|
|
1101
|
-
}
|
|
1102
|
-
});
|
|
1103
|
-
exports.LogixiaLogger = require_nestjs_extras.LogixiaLogger;
|
|
1104
|
-
Object.defineProperty(exports, 'LogixiaLoggerModule', {
|
|
1105
|
-
enumerable: true,
|
|
1106
|
-
get: function () {
|
|
1107
|
-
return require_nestjs_extras.LogixiaLoggerModule;
|
|
1108
|
-
}
|
|
1109
|
-
});
|
|
1110
|
-
Object.defineProperty(exports, 'LogixiaLoggerService', {
|
|
1111
|
-
enumerable: true,
|
|
1112
|
-
get: function () {
|
|
1113
|
-
return require_nestjs_extras.LogixiaLoggerService;
|
|
1114
|
-
}
|
|
1115
|
-
});
|
|
1116
|
-
exports.MAX_INCOMING_ID_LENGTH = require_trace_utils.MAX_INCOMING_ID_LENGTH;
|
|
934
|
+
exports.LogixiaException = require_builder.LogixiaException;
|
|
935
|
+
exports.LogixiaLogger = require_builder.LogixiaLogger;
|
|
936
|
+
exports.MAX_INCOMING_ID_LENGTH = require_request_trace.MAX_INCOMING_ID_LENGTH;
|
|
1117
937
|
exports.MetricsPlugin = MetricsPlugin;
|
|
1118
938
|
exports.NLPSearchEngine = require_search.NLPSearchEngine;
|
|
1119
939
|
exports.OVERFLOW_LABEL_VALUE = OVERFLOW_LABEL_VALUE;
|
|
1120
|
-
exports.OtlpLogTransport = OtlpLogTransport;
|
|
940
|
+
exports.OtlpLogTransport = require_slack_transport.OtlpLogTransport;
|
|
1121
941
|
exports.PatternRecognitionEngine = require_search.PatternRecognitionEngine;
|
|
1122
|
-
exports.PluginRegistry =
|
|
942
|
+
exports.PluginRegistry = require_builder.PluginRegistry;
|
|
1123
943
|
exports.SearchManager = require_search.SearchManager;
|
|
1124
|
-
exports.
|
|
944
|
+
exports.SlackTransport = require_slack_transport.SlackTransport;
|
|
945
|
+
exports.TRACE_CONTEXT_KEY = require_request_trace.TRACE_CONTEXT_KEY;
|
|
1125
946
|
exports.TextFormatter = TextFormatter;
|
|
1126
|
-
exports.TraceContext =
|
|
1127
|
-
|
|
1128
|
-
|
|
1129
|
-
get: function () {
|
|
1130
|
-
return require_nestjs_extras.WebSocketTraceInterceptor;
|
|
1131
|
-
}
|
|
1132
|
-
});
|
|
1133
|
-
exports._setActiveContextKey = require_trace_utils._setActiveContextKey;
|
|
1134
|
-
exports._shutdownRegistrySize = require_nestjs_extras._shutdownRegistrySize;
|
|
947
|
+
exports.TraceContext = require_request_trace.TraceContext;
|
|
948
|
+
exports._setActiveContextKey = require_request_trace._setActiveContextKey;
|
|
949
|
+
exports._shutdownRegistrySize = require_builder._shutdownRegistrySize;
|
|
1135
950
|
exports.addEventFields = addEventFields;
|
|
1136
|
-
exports.applyRedaction =
|
|
951
|
+
exports.applyRedaction = require_builder.applyRedaction;
|
|
1137
952
|
exports.createExpressContextMiddleware = require_async_context.createExpressContextMiddleware;
|
|
1138
953
|
exports.createFastifyContextHook = require_async_context.createFastifyContextHook;
|
|
1139
954
|
exports.createLevelControlHandler = createLevelControlHandler;
|
|
1140
955
|
exports.createLogger = createLogger;
|
|
1141
|
-
exports.createLoggerService = createLoggerService;
|
|
1142
956
|
exports.createMetricsPlugin = createMetricsPlugin;
|
|
1143
|
-
exports.createTraceMiddleware =
|
|
957
|
+
exports.createTraceMiddleware = require_request_trace.createTraceMiddleware;
|
|
1144
958
|
exports.createTypedLogger = createTypedLogger;
|
|
1145
959
|
exports.decycleValue = require_safe_stringify.decycleValue;
|
|
1146
960
|
exports.defineLogSchema = defineLogSchema;
|
|
1147
|
-
exports.deregisterFromShutdown =
|
|
1148
|
-
exports.disableOtelBridge =
|
|
1149
|
-
exports.extractTraceId =
|
|
1150
|
-
exports.flushOnExit =
|
|
1151
|
-
exports.generateRequestId =
|
|
1152
|
-
exports.generateTraceId =
|
|
1153
|
-
exports.getActiveOtelContext =
|
|
1154
|
-
exports.getCurrentTraceId =
|
|
961
|
+
exports.deregisterFromShutdown = require_builder.deregisterFromShutdown;
|
|
962
|
+
exports.disableOtelBridge = require_builder.disableOtelBridge;
|
|
963
|
+
exports.extractTraceId = require_request_trace.extractTraceId;
|
|
964
|
+
exports.flushOnExit = require_builder.flushOnExit;
|
|
965
|
+
exports.generateRequestId = require_builder.generateRequestId;
|
|
966
|
+
exports.generateTraceId = require_builder.generateTraceId;
|
|
967
|
+
exports.getActiveOtelContext = require_builder.getActiveOtelContext;
|
|
968
|
+
exports.getCurrentTraceId = require_request_trace.getCurrentTraceId;
|
|
1155
969
|
exports.getEventFields = getEventFields;
|
|
1156
|
-
exports.getOtelMetaFields =
|
|
1157
|
-
exports.getTraceContextKey =
|
|
1158
|
-
exports.globalPluginRegistry =
|
|
1159
|
-
exports.initOtelBridge =
|
|
1160
|
-
exports.isError =
|
|
1161
|
-
exports.isLogixiaException =
|
|
970
|
+
exports.getOtelMetaFields = require_builder.getOtelMetaFields;
|
|
971
|
+
exports.getTraceContextKey = require_request_trace.getTraceContextKey;
|
|
972
|
+
exports.globalPluginRegistry = require_builder.globalPluginRegistry;
|
|
973
|
+
exports.initOtelBridge = require_builder.initOtelBridge;
|
|
974
|
+
exports.isError = require_builder.isError;
|
|
975
|
+
exports.isLogixiaException = require_builder.isLogixiaException;
|
|
1162
976
|
exports.logger = logger;
|
|
1163
|
-
exports.normalizeError =
|
|
1164
|
-
exports.redactObject =
|
|
1165
|
-
exports.registerForShutdown =
|
|
977
|
+
exports.normalizeError = require_builder.normalizeError;
|
|
978
|
+
exports.redactObject = require_builder.redactObject;
|
|
979
|
+
exports.registerForShutdown = require_builder.registerForShutdown;
|
|
1166
980
|
exports.registerLevelSignal = registerLevelSignal;
|
|
1167
|
-
exports.resetShutdownHandlers =
|
|
981
|
+
exports.resetShutdownHandlers = require_builder.resetShutdownHandlers;
|
|
1168
982
|
exports.retrocycle = require_safe_stringify.retrocycle;
|
|
1169
|
-
exports.runWithTraceId =
|
|
983
|
+
exports.runWithTraceId = require_request_trace.runWithTraceId;
|
|
1170
984
|
exports.safeStringify = require_safe_stringify.safeStringify;
|
|
1171
|
-
exports.sanitizeIncomingId =
|
|
1172
|
-
exports.serializeError =
|
|
985
|
+
exports.sanitizeIncomingId = require_request_trace.sanitizeIncomingId;
|
|
986
|
+
exports.serializeError = require_builder.serializeError;
|
|
1173
987
|
exports.setEventField = setEventField;
|
|
1174
|
-
exports.setTraceId =
|
|
988
|
+
exports.setTraceId = require_request_trace.setTraceId;
|
|
1175
989
|
exports.stringifyForLog = require_safe_stringify.stringifyForLog;
|
|
1176
|
-
exports.toOtelSeverity = toOtelSeverity;
|
|
1177
|
-
exports.traceStorage =
|
|
1178
|
-
exports.usePlugin =
|
|
990
|
+
exports.toOtelSeverity = require_slack_transport.toOtelSeverity;
|
|
991
|
+
exports.traceStorage = require_request_trace.traceStorage;
|
|
992
|
+
exports.usePlugin = require_builder.usePlugin;
|
|
1179
993
|
exports.wideEventMiddleware = wideEventMiddleware;
|
|
1180
994
|
exports.withWideEvent = withWideEvent;
|
|
995
|
+
|
|
1181
996
|
//# sourceMappingURL=index.js.map
|