logixia 2.0.0 → 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 +46 -29
- 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-Cn_3Usvu.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-D7Da4RAb.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 +45 -25
- package/dist/browser.d.mts.map +1 -1
- package/dist/browser.d.ts +45 -25
- package/dist/browser.d.ts.map +1 -1
- package/dist/browser.js +420 -53
- package/dist/browser.js.map +1 -1
- package/dist/browser.mjs +421 -56
- package/dist/browser.mjs.map +1 -1
- package/dist/{builder-0gEzRopq.mjs → builder-D70z6kjj.mjs} +212 -104
- package/dist/builder-D70z6kjj.mjs.map +1 -0
- package/dist/{builder-D44QktIo.js → builder-M7NoaugM.js} +355 -249
- package/dist/builder-M7NoaugM.js.map +1 -0
- package/dist/cli/index.js +59 -59
- 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-DsEq633o.d.ts → cloudwatch.transport-Bf7L4I59.d.ts} +2 -6
- package/dist/cloudwatch.transport-Bf7L4I59.d.ts.map +1 -0
- package/dist/{cloudwatch.transport-UlyZFWMn.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-B7oc97sG.d.ts → gcp.transport-C5D72b1g.d.mts} +3 -6
- package/dist/gcp.transport-C5D72b1g.d.mts.map +1 -0
- package/dist/{gcp.transport-GrJurKo8.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-DhIoploR.d.ts → index-DwozbmB4.d.ts} +3 -8
- package/dist/index-DwozbmB4.d.ts.map +1 -0
- package/dist/{index-3mw5gaCw.d.mts → index-xqaJtAZn.d.mts} +3 -8
- package/dist/index-xqaJtAZn.d.mts.map +1 -0
- package/dist/index.d.mts +106 -165
- package/dist/index.d.mts.map +1 -1
- package/dist/index.d.ts +105 -164
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +164 -261
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +147 -243
- 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-UVeN-mQm.d.ts → logitron-logger-D2B75Oc7.d.ts} +116 -8
- package/dist/logitron-logger-D2B75Oc7.d.ts.map +1 -0
- package/dist/{logitron-logger-BFDSO8Io.d.mts → logitron-logger-oEd6wNhf.d.mts} +116 -8
- 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 +26 -44
- package/dist/nest.d.mts.map +1 -1
- package/dist/nest.d.ts +26 -44
- package/dist/nest.d.ts.map +1 -1
- package/dist/nest.js +116 -132
- package/dist/nest.js.map +1 -1
- package/dist/nest.mjs +59 -73
- package/dist/nest.mjs.map +1 -1
- 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-CNh9uVwR.d.ts → search-BH33XhuU.d.mts} +2 -22
- package/dist/search-BH33XhuU.d.mts.map +1 -0
- package/dist/{search-BFbu_oVn.mjs → search-CWMVYC-R.mjs} +22 -39
- package/dist/search-CWMVYC-R.mjs.map +1 -0
- package/dist/{search-DXANsQ2n.d.mts → search-CazwyX5Z.d.ts} +2 -22
- package/dist/search-CazwyX5Z.d.ts.map +1 -0
- package/dist/{search-C4V0OMEn.js → search-DUfWuzFP.js} +52 -69
- 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-Bzw7sucI.mjs → slack.transport-Ce96JBDk.mjs} +212 -31
- package/dist/slack.transport-Ce96JBDk.mjs.map +1 -0
- package/dist/{slack.transport-BfJRouB2.js → slack.transport-Dlx3xvb7.js} +234 -41
- package/dist/slack.transport-Dlx3xvb7.js.map +1 -0
- package/dist/{slack.transport-BZzoXDPn.d.mts → slack.transport-DrirgDNy.d.ts} +56 -9
- package/dist/slack.transport-DrirgDNy.d.ts.map +1 -0
- package/dist/{slack.transport-CXjQYOes.d.ts → slack.transport-DxHOXlLu.d.mts} +56 -9
- 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-CXbKKdVE.js → transport.manager-DkcEOlqV.js} +164 -160
- package/dist/transport.manager-DkcEOlqV.js.map +1 -0
- package/dist/{transport.manager-BiuCAJd2.mjs → transport.manager-eZ_EeC00.mjs} +108 -99
- package/dist/transport.manager-eZ_EeC00.mjs.map +1 -0
- package/dist/{transport.types-CGoHpWQR.d.ts → transport.types-BJVL1QQl.d.mts} +1 -3
- package/dist/transport.types-BJVL1QQl.d.mts.map +1 -0
- package/dist/{transport.types-BMnurPcc.d.mts → transport.types-BJVL1QQl.d.ts} +1 -3
- package/dist/transport.types-BJVL1QQl.d.ts.map +1 -0
- package/dist/transports.d.mts +22 -36
- package/dist/transports.d.mts.map +1 -1
- package/dist/transports.d.ts +22 -36
- package/dist/transports.d.ts.map +1 -1
- package/dist/transports.js +10 -13
- package/dist/transports.mjs +7 -13
- 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-CdzSZJmw.d.ts → worker.transport-BuPwBi3d.d.ts} +2 -6
- package/dist/worker.transport-BuPwBi3d.d.ts.map +1 -0
- package/dist/{worker.transport-BdPxu3PN.js → worker.transport-C6GNl_r2.js} +44 -14
- package/dist/worker.transport-C6GNl_r2.js.map +1 -0
- package/dist/{worker.transport-lPxO2MVL.mjs → worker.transport-DLVA4y2e.mjs} +39 -9
- package/dist/worker.transport-DLVA4y2e.mjs.map +1 -0
- package/dist/{worker.transport-JvGPog3C.d.mts → worker.transport-hJay1wxA.d.mts} +2 -6
- package/dist/worker.transport-hJay1wxA.d.mts.map +1 -0
- package/package.json +19 -11
- 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-CHnjVRF-.mjs.map +0 -1
- package/dist/azure-monitor.transport-Cn_3Usvu.d.ts.map +0 -1
- package/dist/azure-monitor.transport-CrvfHd9C.js.map +0 -1
- package/dist/azure-monitor.transport-D7Da4RAb.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/builder-0gEzRopq.mjs.map +0 -1
- package/dist/builder-D44QktIo.js.map +0 -1
- package/dist/chunk-DLSkYcPk.mjs +0 -7
- package/dist/chunk-nOFOJqeH.js +0 -30
- package/dist/cloudwatch.transport-BO1ahxw-.js.map +0 -1
- package/dist/cloudwatch.transport-DZ6ies7g.mjs.map +0 -1
- package/dist/cloudwatch.transport-DsEq633o.d.ts.map +0 -1
- package/dist/cloudwatch.transport-UlyZFWMn.d.mts.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-B7oc97sG.d.ts.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-GrJurKo8.d.mts.map +0 -1
- package/dist/index-3mw5gaCw.d.mts.map +0 -1
- package/dist/index-DhIoploR.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/logitron-logger-BFDSO8Io.d.mts.map +0 -1
- package/dist/logitron-logger-UVeN-mQm.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-BFbu_oVn.mjs.map +0 -1
- package/dist/search-C4V0OMEn.js.map +0 -1
- package/dist/search-CNh9uVwR.d.ts.map +0 -1
- package/dist/search-DXANsQ2n.d.mts.map +0 -1
- package/dist/slack.transport-BZzoXDPn.d.mts.map +0 -1
- package/dist/slack.transport-BfJRouB2.js.map +0 -1
- package/dist/slack.transport-Bzw7sucI.mjs.map +0 -1
- package/dist/slack.transport-CXjQYOes.d.ts.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-BiuCAJd2.mjs.map +0 -1
- package/dist/transport.manager-CXbKKdVE.js.map +0 -1
- package/dist/transport.types-BMnurPcc.d.mts.map +0 -1
- package/dist/transport.types-CGoHpWQR.d.ts.map +0 -1
- package/dist/worker.transport-BdPxu3PN.js.map +0 -1
- package/dist/worker.transport-CdzSZJmw.d.ts.map +0 -1
- package/dist/worker.transport-JvGPog3C.d.mts.map +0 -1
- package/dist/worker.transport-lPxO2MVL.mjs.map +0 -1
package/dist/index.js
CHANGED
|
@@ -1,19 +1,15 @@
|
|
|
1
|
-
|
|
2
|
-
const
|
|
3
|
-
const
|
|
4
|
-
const
|
|
5
|
-
require(
|
|
6
|
-
const
|
|
7
|
-
const
|
|
8
|
-
const
|
|
9
|
-
const
|
|
10
|
-
const
|
|
11
|
-
const require_slack_transport = require('./slack.transport-BfJRouB2.js');
|
|
12
|
-
const require_search = require('./search-C4V0OMEn.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");
|
|
13
11
|
let node_async_hooks = require("node:async_hooks");
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
//#region src/formatters/json.formatter.ts
|
|
12
|
+
// src/formatters/json.formatter.ts
|
|
17
13
|
/**
|
|
18
14
|
* Build a JSON.stringify replacer that replaces circular references with the
|
|
19
15
|
* string '[Circular]' instead of throwing. A fresh replacer must be created per
|
|
@@ -77,9 +73,7 @@ var JsonFormatter = class {
|
|
|
77
73
|
return serialized;
|
|
78
74
|
}
|
|
79
75
|
};
|
|
80
|
-
|
|
81
|
-
//#endregion
|
|
82
|
-
//#region src/formatters/text.formatter.ts
|
|
76
|
+
// src/formatters/text.formatter.ts
|
|
83
77
|
const stripControls = (value) => require_transport_manager.stripControlChars(require_coerce_utils.safeToString(value));
|
|
84
78
|
var TextFormatter = class TextFormatter {
|
|
85
79
|
constructor(options = {}) {
|
|
@@ -141,7 +135,6 @@ var TextFormatter = class TextFormatter {
|
|
|
141
135
|
switch (this.timestampFormat) {
|
|
142
136
|
case "iso": return date.toISOString();
|
|
143
137
|
case "short": return date.toLocaleTimeString();
|
|
144
|
-
case "locale":
|
|
145
138
|
default: return date.toLocaleString();
|
|
146
139
|
}
|
|
147
140
|
}
|
|
@@ -199,9 +192,7 @@ var TextFormatter = class TextFormatter {
|
|
|
199
192
|
});
|
|
200
193
|
}
|
|
201
194
|
};
|
|
202
|
-
|
|
203
|
-
//#endregion
|
|
204
|
-
//#region src/utils/runtime-control.ts
|
|
195
|
+
// src/utils/runtime-control.ts
|
|
205
196
|
const DEFAULT_CYCLE = [
|
|
206
197
|
"error",
|
|
207
198
|
"warn",
|
|
@@ -218,13 +209,14 @@ const DEFAULT_CYCLE = [
|
|
|
218
209
|
* memorizable command (`kill -USR2 <pid>`) is enough to ratchet verbosity up
|
|
219
210
|
* while chasing a bug and back down again — no value to remember.
|
|
220
211
|
*/
|
|
221
|
-
function registerLevelSignal(logger
|
|
212
|
+
function registerLevelSignal(logger, options = {}) {
|
|
222
213
|
const signal = options.signal ?? "SIGUSR2";
|
|
223
214
|
const cycle = options.cycle && options.cycle.length > 0 ? options.cycle : [...DEFAULT_CYCLE];
|
|
224
215
|
const handler = () => {
|
|
225
|
-
const current = logger
|
|
226
|
-
const
|
|
227
|
-
|
|
216
|
+
const current = logger.getLevel();
|
|
217
|
+
const idx = cycle.indexOf(current);
|
|
218
|
+
const next = cycle[(idx + 1) % cycle.length];
|
|
219
|
+
logger.setLevel(next);
|
|
228
220
|
require_internal_log.internalLog(`runtime level changed via ${signal}: ${current} → ${next}`);
|
|
229
221
|
};
|
|
230
222
|
process.on(signal, handler);
|
|
@@ -233,7 +225,7 @@ function registerLevelSignal(logger$1, options = {}) {
|
|
|
233
225
|
};
|
|
234
226
|
}
|
|
235
227
|
/** Maximum accepted request body size for the level control handler. */
|
|
236
|
-
const MAX_BODY_BYTES =
|
|
228
|
+
const MAX_BODY_BYTES = 16384;
|
|
237
229
|
function isJsonContentType(req) {
|
|
238
230
|
var _req$headers;
|
|
239
231
|
const raw = (_req$headers = req.headers) === null || _req$headers === void 0 ? void 0 : _req$headers["content-type"];
|
|
@@ -241,7 +233,7 @@ function isJsonContentType(req) {
|
|
|
241
233
|
if (typeof value !== "string") return false;
|
|
242
234
|
return value.split(";")[0].trim().toLowerCase() === "application/json";
|
|
243
235
|
}
|
|
244
|
-
const VALID_LEVELS = new Set([
|
|
236
|
+
const VALID_LEVELS = /* @__PURE__ */ new Set([
|
|
245
237
|
"error",
|
|
246
238
|
"warn",
|
|
247
239
|
"info",
|
|
@@ -270,13 +262,13 @@ const VALID_LEVELS = new Set([
|
|
|
270
262
|
* which also keeps cross-site form posts out) and a body of at most 16 KB
|
|
271
263
|
* (otherwise 413).
|
|
272
264
|
*/
|
|
273
|
-
function createLevelControlHandler(logger
|
|
265
|
+
function createLevelControlHandler(logger, options = {}) {
|
|
274
266
|
const allowed = options.allowedLevels && options.allowedLevels.length > 0 ? new Set(options.allowedLevels.map((l) => l.toLowerCase())) : VALID_LEVELS;
|
|
275
267
|
const snapshot = () => {
|
|
276
268
|
var _logger$getNamespaceL;
|
|
277
269
|
return {
|
|
278
|
-
level: logger
|
|
279
|
-
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)) ?? {}
|
|
280
272
|
};
|
|
281
273
|
};
|
|
282
274
|
const send = (res, status, body) => {
|
|
@@ -302,7 +294,7 @@ function createLevelControlHandler(logger$1, options = {}) {
|
|
|
302
294
|
});
|
|
303
295
|
return;
|
|
304
296
|
}
|
|
305
|
-
logger
|
|
297
|
+
logger.setLevel(lvl);
|
|
306
298
|
}
|
|
307
299
|
if (parsed.namespaceLevels !== void 0) {
|
|
308
300
|
if (typeof parsed.namespaceLevels !== "object" || parsed.namespaceLevels === null || Array.isArray(parsed.namespaceLevels)) {
|
|
@@ -314,9 +306,9 @@ function createLevelControlHandler(logger$1, options = {}) {
|
|
|
314
306
|
send(res, 400, { error: `unknown level "${String(lvl)}" for namespace "${pat}"` });
|
|
315
307
|
return;
|
|
316
308
|
}
|
|
317
|
-
if (logger
|
|
309
|
+
if (logger.setNamespaceLevels) {
|
|
318
310
|
const coerced = Object.fromEntries(Object.entries(nl).map(([pat, lvl]) => [pat, String(lvl).toLowerCase()]));
|
|
319
|
-
logger
|
|
311
|
+
logger.setNamespaceLevels(coerced);
|
|
320
312
|
} else require_internal_log.internalWarn("level control: logger does not support setNamespaceLevels — ignored");
|
|
321
313
|
}
|
|
322
314
|
send(res, 200, snapshot());
|
|
@@ -378,9 +370,54 @@ function createLevelControlHandler(logger$1, options = {}) {
|
|
|
378
370
|
send(res, 405, { error: `method ${method} not allowed` });
|
|
379
371
|
};
|
|
380
372
|
}
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
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
|
+
}
|
|
384
421
|
/**
|
|
385
422
|
* Define a typed schema for a category of log entries.
|
|
386
423
|
*
|
|
@@ -391,7 +428,7 @@ function defineLogSchema(fields) {
|
|
|
391
428
|
return {
|
|
392
429
|
fields,
|
|
393
430
|
validate(payload) {
|
|
394
|
-
if (
|
|
431
|
+
if (isProduction()) return [];
|
|
395
432
|
const warnings = [];
|
|
396
433
|
for (const [key, def] of Object.entries(fields)) {
|
|
397
434
|
const value = payload[key];
|
|
@@ -418,7 +455,7 @@ function defineLogSchema(fields) {
|
|
|
418
455
|
* @param logger Any object that implements `IBaseLogger` (e.g. the result of `createLogger()`)
|
|
419
456
|
* @param schema Optional schema for dev-time validation. Created with `defineLogSchema()`.
|
|
420
457
|
*/
|
|
421
|
-
function createTypedLogger(logger
|
|
458
|
+
function createTypedLogger(logger, schema) {
|
|
422
459
|
function withValidation(level, fn, message, data) {
|
|
423
460
|
if (schema && data) {
|
|
424
461
|
const warnings = schema.validate(data);
|
|
@@ -427,25 +464,56 @@ function createTypedLogger(logger$1, schema) {
|
|
|
427
464
|
return fn(message, data);
|
|
428
465
|
}
|
|
429
466
|
return {
|
|
430
|
-
raw: logger
|
|
467
|
+
raw: logger,
|
|
431
468
|
error(messageOrError, data) {
|
|
432
469
|
if (schema && data) {
|
|
433
470
|
const warnings = schema.validate(data);
|
|
434
471
|
const display = messageOrError instanceof Error ? messageOrError.message : messageOrError;
|
|
435
472
|
for (const w of warnings) require_internal_log.internalWarn(`[logixia/schema] ${w} — level=error message="${display}"`);
|
|
436
473
|
}
|
|
437
|
-
return logger
|
|
474
|
+
return logger.error(messageOrError, data);
|
|
438
475
|
},
|
|
439
|
-
warn: (m, d) => withValidation("warn", logger
|
|
440
|
-
info: (m, d) => withValidation("info", logger
|
|
441
|
-
debug: (m, d) => withValidation("debug", logger
|
|
442
|
-
verbose: (m, d) => withValidation("verbose", (logger
|
|
443
|
-
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)
|
|
444
481
|
};
|
|
445
482
|
}
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
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
|
+
*/
|
|
449
517
|
const _storage = new node_async_hooks.AsyncLocalStorage();
|
|
450
518
|
/**
|
|
451
519
|
* Merge fields into the wide event for the current async scope. No-op (with no
|
|
@@ -466,7 +534,7 @@ function getEventFields() {
|
|
|
466
534
|
const state = _storage.getStore();
|
|
467
535
|
return state ? { ...state.fields } : void 0;
|
|
468
536
|
}
|
|
469
|
-
function emit(logger
|
|
537
|
+
function emit(logger, state, options, extra) {
|
|
470
538
|
if (state.emitted) return;
|
|
471
539
|
state.emitted = true;
|
|
472
540
|
const level = options.level ?? "info";
|
|
@@ -477,10 +545,10 @@ function emit(logger$1, state, options, extra) {
|
|
|
477
545
|
if (extra) Object.assign(payload, extra);
|
|
478
546
|
payload[durationField] = Date.now() - state.startMs;
|
|
479
547
|
if (includeTrace) {
|
|
480
|
-
const traceId =
|
|
548
|
+
const traceId = require_request_trace.getCurrentTraceId();
|
|
481
549
|
if (traceId !== void 0 && payload["traceId"] === void 0) payload["traceId"] = traceId;
|
|
482
550
|
}
|
|
483
|
-
const p = logger
|
|
551
|
+
const p = logger.logLevel(level, message, payload);
|
|
484
552
|
if (p && typeof p.catch === "function") p.catch(() => {});
|
|
485
553
|
}
|
|
486
554
|
/**
|
|
@@ -489,7 +557,7 @@ function emit(logger$1, state, options, extra) {
|
|
|
489
557
|
* when the callback settles — on success OR error (the canonical "emit in
|
|
490
558
|
* finally" guarantee). On error, `error` + `errorMessage` fields are added.
|
|
491
559
|
*/
|
|
492
|
-
async function withWideEvent(logger
|
|
560
|
+
async function withWideEvent(logger, initialFields, callback, options = {}) {
|
|
493
561
|
const state = {
|
|
494
562
|
fields: { ...initialFields },
|
|
495
563
|
startMs: Date.now(),
|
|
@@ -498,10 +566,10 @@ async function withWideEvent(logger$1, initialFields, callback, options = {}) {
|
|
|
498
566
|
return _storage.run(state, async () => {
|
|
499
567
|
try {
|
|
500
568
|
const result = await callback();
|
|
501
|
-
emit(logger
|
|
569
|
+
emit(logger, state, options);
|
|
502
570
|
return result;
|
|
503
571
|
} catch (error) {
|
|
504
|
-
emit(logger
|
|
572
|
+
emit(logger, state, options, {
|
|
505
573
|
error: true,
|
|
506
574
|
errorMessage: error instanceof Error ? error.message : String(error)
|
|
507
575
|
});
|
|
@@ -516,7 +584,7 @@ async function withWideEvent(logger$1, initialFields, callback, options = {}) {
|
|
|
516
584
|
* more via `addEventFields`. The completion event includes `statusCode` and the
|
|
517
585
|
* request duration.
|
|
518
586
|
*/
|
|
519
|
-
function wideEventMiddleware(logger
|
|
587
|
+
function wideEventMiddleware(logger, options = {}) {
|
|
520
588
|
return function logixiaWideEventMiddleware(req, res, next) {
|
|
521
589
|
var _options$skip, _req$socket, _res$once, _res$once2;
|
|
522
590
|
if ((_options$skip = options.skip) === null || _options$skip === void 0 ? void 0 : _options$skip.call(options, req)) {
|
|
@@ -534,192 +602,14 @@ function wideEventMiddleware(logger$1, options = {}) {
|
|
|
534
602
|
emitted: false
|
|
535
603
|
};
|
|
536
604
|
const finalize = () => {
|
|
537
|
-
emit(logger
|
|
605
|
+
emit(logger, state, options, { statusCode: res.statusCode ?? 0 });
|
|
538
606
|
};
|
|
539
607
|
(_res$once = res.once) === null || _res$once === void 0 || _res$once.call(res, "finish", finalize);
|
|
540
608
|
(_res$once2 = res.once) === null || _res$once2 === void 0 || _res$once2.call(res, "close", finalize);
|
|
541
609
|
_storage.run(state, () => next());
|
|
542
610
|
};
|
|
543
611
|
}
|
|
544
|
-
|
|
545
|
-
//#endregion
|
|
546
|
-
//#region src/transports/otlp.transport.ts
|
|
547
|
-
const HEX_32 = /^[0-9a-f]{32}$/;
|
|
548
|
-
/**
|
|
549
|
-
* OTLP JSON wants a 32-char lowercase hex trace id. Dashed UUIDs are
|
|
550
|
-
* normalised; anything else (or all zeros) returns undefined.
|
|
551
|
-
*/
|
|
552
|
-
function toOtlpTraceId(id) {
|
|
553
|
-
const hex = id.replace(/-/g, "").toLowerCase();
|
|
554
|
-
return HEX_32.test(hex) && hex !== "0".repeat(32) ? hex : void 0;
|
|
555
|
-
}
|
|
556
|
-
/**
|
|
557
|
-
* Map a logixia level name to an OTel SeverityNumber (1–24) and text.
|
|
558
|
-
* Per the OTel logs SDK spec: TRACE=1, DEBUG=5, INFO=9, WARN=13, ERROR=17,
|
|
559
|
-
* FATAL=21. Custom/unknown levels fall back to INFO (9).
|
|
560
|
-
*/
|
|
561
|
-
function toOtelSeverity(level) {
|
|
562
|
-
switch (level.toLowerCase()) {
|
|
563
|
-
case "trace": return {
|
|
564
|
-
number: 1,
|
|
565
|
-
text: "TRACE"
|
|
566
|
-
};
|
|
567
|
-
case "verbose": return {
|
|
568
|
-
number: 5,
|
|
569
|
-
text: "DEBUG"
|
|
570
|
-
};
|
|
571
|
-
case "debug": return {
|
|
572
|
-
number: 5,
|
|
573
|
-
text: "DEBUG"
|
|
574
|
-
};
|
|
575
|
-
case "info": return {
|
|
576
|
-
number: 9,
|
|
577
|
-
text: "INFO"
|
|
578
|
-
};
|
|
579
|
-
case "warn":
|
|
580
|
-
case "warning": return {
|
|
581
|
-
number: 13,
|
|
582
|
-
text: "WARN"
|
|
583
|
-
};
|
|
584
|
-
case "error": return {
|
|
585
|
-
number: 17,
|
|
586
|
-
text: "ERROR"
|
|
587
|
-
};
|
|
588
|
-
case "fatal": return {
|
|
589
|
-
number: 21,
|
|
590
|
-
text: "FATAL"
|
|
591
|
-
};
|
|
592
|
-
default: return {
|
|
593
|
-
number: 9,
|
|
594
|
-
text: "INFO"
|
|
595
|
-
};
|
|
596
|
-
}
|
|
597
|
-
}
|
|
598
|
-
/** Coerce a JS value into an OTLP AnyValue. */
|
|
599
|
-
function toAnyValue(value) {
|
|
600
|
-
if (typeof value === "string") return { stringValue: value };
|
|
601
|
-
if (typeof value === "boolean") return { boolValue: value };
|
|
602
|
-
if (typeof value === "number") return Number.isInteger(value) ? { intValue: value } : { doubleValue: value };
|
|
603
|
-
if (typeof value === "bigint") return { stringValue: value.toString() };
|
|
604
|
-
if (value === null || value === void 0) return { stringValue: "" };
|
|
605
|
-
try {
|
|
606
|
-
return { stringValue: require_safe_stringify.stringifyForLog(value) };
|
|
607
|
-
} catch {
|
|
608
|
-
return { stringValue: String(value) };
|
|
609
|
-
}
|
|
610
|
-
}
|
|
611
|
-
/** Build the OTLP KeyValue attribute list from a flat record. */
|
|
612
|
-
function toAttributes(rec) {
|
|
613
|
-
return Object.entries(rec).map(([key, value]) => ({
|
|
614
|
-
key,
|
|
615
|
-
value: toAnyValue(value)
|
|
616
|
-
}));
|
|
617
|
-
}
|
|
618
|
-
var OtlpLogTransport = class {
|
|
619
|
-
constructor(config) {
|
|
620
|
-
this.name = "otlp";
|
|
621
|
-
this.flushTimer = null;
|
|
622
|
-
this.url = config.url;
|
|
623
|
-
this.headers = config.headers ?? {};
|
|
624
|
-
this.batchSize = config.batchSize ?? 100;
|
|
625
|
-
this.flushIntervalMs = config.flushIntervalMs ?? 5e3;
|
|
626
|
-
this.requestTimeoutMs = config.requestTimeoutMs ?? require_batch_buffer.DEFAULT_REQUEST_TIMEOUT_MS;
|
|
627
|
-
this.level = config.level;
|
|
628
|
-
this.buffer = new require_batch_buffer.BatchBuffer({
|
|
629
|
-
name: "OtlpLogTransport",
|
|
630
|
-
batchSize: this.batchSize,
|
|
631
|
-
maxBufferSize: config.maxBufferSize ?? require_batch_buffer.DEFAULT_MAX_BUFFER_SIZE,
|
|
632
|
-
send: (entries) => this.send(entries)
|
|
633
|
-
});
|
|
634
|
-
this.resourceAttrs = toAttributes({
|
|
635
|
-
"service.name": config.serviceName ?? "logixia",
|
|
636
|
-
...config.serviceVersion ? { "service.version": config.serviceVersion } : {},
|
|
637
|
-
...config.environment ? { "deployment.environment": config.environment } : {},
|
|
638
|
-
...config.resourceAttributes ?? {}
|
|
639
|
-
});
|
|
640
|
-
this.flushTimer = setInterval(() => {
|
|
641
|
-
this.flush().catch(() => {});
|
|
642
|
-
}, this.flushIntervalMs);
|
|
643
|
-
if (this.flushTimer.unref) this.flushTimer.unref();
|
|
644
|
-
}
|
|
645
|
-
write(entry) {
|
|
646
|
-
this.buffer.push(entry);
|
|
647
|
-
this.buffer.flushIfFull();
|
|
648
|
-
}
|
|
649
|
-
/** Convert one entry into an OTLP LogRecord. */
|
|
650
|
-
toLogRecord(entry) {
|
|
651
|
-
const sev = toOtelSeverity(entry.level);
|
|
652
|
-
const tsNanos = String(entry.timestamp.getTime() * 1e6);
|
|
653
|
-
const attrs = { ...entry.data ?? {} };
|
|
654
|
-
if (entry.context !== void 0) attrs["context"] = entry.context;
|
|
655
|
-
if (entry.appName !== void 0) attrs["app.name"] = entry.appName;
|
|
656
|
-
if (entry.environment !== void 0) attrs["deployment.environment"] = entry.environment;
|
|
657
|
-
const record = {
|
|
658
|
-
timeUnixNano: tsNanos,
|
|
659
|
-
observedTimeUnixNano: tsNanos,
|
|
660
|
-
severityNumber: sev.number,
|
|
661
|
-
severityText: sev.text,
|
|
662
|
-
body: { stringValue: entry.message },
|
|
663
|
-
attributes: toAttributes(attrs)
|
|
664
|
-
};
|
|
665
|
-
if (entry.traceId) {
|
|
666
|
-
const traceId = toOtlpTraceId(entry.traceId);
|
|
667
|
-
if (traceId) record["traceId"] = traceId;
|
|
668
|
-
else record["attributes"].push({
|
|
669
|
-
key: "trace_id",
|
|
670
|
-
value: { stringValue: entry.traceId }
|
|
671
|
-
});
|
|
672
|
-
}
|
|
673
|
-
return record;
|
|
674
|
-
}
|
|
675
|
-
buildPayload(entries) {
|
|
676
|
-
return require_safe_stringify.stringifyForLog({ resourceLogs: [{
|
|
677
|
-
resource: { attributes: this.resourceAttrs },
|
|
678
|
-
scopeLogs: [{
|
|
679
|
-
scope: { name: "logixia" },
|
|
680
|
-
logRecords: entries.map((e) => this.toLogRecord(e))
|
|
681
|
-
}]
|
|
682
|
-
}] });
|
|
683
|
-
}
|
|
684
|
-
flush() {
|
|
685
|
-
return this.buffer.flush();
|
|
686
|
-
}
|
|
687
|
-
async send(entries) {
|
|
688
|
-
if (typeof fetch !== "function") {
|
|
689
|
-
require_internal_log.internalWarn("OtlpLogTransport: global fetch unavailable — cannot export logs");
|
|
690
|
-
return;
|
|
691
|
-
}
|
|
692
|
-
const controller = new AbortController();
|
|
693
|
-
const timer = setTimeout(() => controller.abort(), this.requestTimeoutMs);
|
|
694
|
-
try {
|
|
695
|
-
const res = await fetch(this.url, {
|
|
696
|
-
method: "POST",
|
|
697
|
-
headers: {
|
|
698
|
-
"Content-Type": "application/json",
|
|
699
|
-
...this.headers
|
|
700
|
-
},
|
|
701
|
-
body: this.buildPayload(entries),
|
|
702
|
-
signal: controller.signal
|
|
703
|
-
});
|
|
704
|
-
if (!res.ok) throw new require_batch_buffer.HttpError(res.status, "", "OTLP export");
|
|
705
|
-
} catch (err) {
|
|
706
|
-
if (controller.signal.aborted) throw new Error(`OTLP export timed out after ${this.requestTimeoutMs}ms`, { cause: err });
|
|
707
|
-
throw err;
|
|
708
|
-
} finally {
|
|
709
|
-
clearTimeout(timer);
|
|
710
|
-
}
|
|
711
|
-
}
|
|
712
|
-
async close() {
|
|
713
|
-
if (this.flushTimer) {
|
|
714
|
-
clearInterval(this.flushTimer);
|
|
715
|
-
this.flushTimer = null;
|
|
716
|
-
}
|
|
717
|
-
await this.buffer.close();
|
|
718
|
-
}
|
|
719
|
-
};
|
|
720
|
-
|
|
721
|
-
//#endregion
|
|
722
|
-
//#region src/metrics.ts
|
|
612
|
+
// src/metrics.ts
|
|
723
613
|
const DEFAULT_BUCKETS = [
|
|
724
614
|
1,
|
|
725
615
|
5,
|
|
@@ -861,9 +751,10 @@ var MetricsPlugin = class {
|
|
|
861
751
|
const helpText = config.help ?? rawName.replace(/_/g, " ");
|
|
862
752
|
lines.push(`# HELP ${metricName} ${helpText}`);
|
|
863
753
|
lines.push(`# TYPE ${metricName} ${config.type}`);
|
|
864
|
-
if (state.type === "counter")
|
|
865
|
-
|
|
866
|
-
|
|
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) {
|
|
867
758
|
const labelSuffix = renderLabels(labelKey);
|
|
868
759
|
const baseObj = labelKey === "{}" ? {} : JSON.parse(labelKey);
|
|
869
760
|
for (let i = 0; i < state.buckets.length; i++) {
|
|
@@ -881,8 +772,10 @@ var MetricsPlugin = class {
|
|
|
881
772
|
lines.push(`${metricName}_sum${labelSuffix} ${state.sums.get(labelKey) ?? 0}`);
|
|
882
773
|
lines.push(`${metricName}_count${labelSuffix} ${state.observations.get(labelKey) ?? 0}`);
|
|
883
774
|
}
|
|
884
|
-
else if (state.type === "gauge")
|
|
885
|
-
|
|
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
|
+
}
|
|
886
779
|
}
|
|
887
780
|
return `${lines.join("\n")}\n`;
|
|
888
781
|
}
|
|
@@ -999,9 +892,20 @@ var MetricsPlugin = class {
|
|
|
999
892
|
function createMetricsPlugin(map, options) {
|
|
1000
893
|
return new MetricsPlugin(map, options);
|
|
1001
894
|
}
|
|
1002
|
-
|
|
1003
|
-
|
|
1004
|
-
|
|
895
|
+
// src/index.ts
|
|
896
|
+
/**
|
|
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
|
|
908
|
+
*/
|
|
1005
909
|
/**
|
|
1006
910
|
* Create a new Logixia logger instance with TypeScript support for custom levels
|
|
1007
911
|
* @param config - Logger configuration
|
|
@@ -1015,15 +919,13 @@ const logger = new require_builder.LogixiaLogger(require_builder.DEFAULT_CONFIG)
|
|
|
1015
919
|
/**
|
|
1016
920
|
* Export default configuration for reference
|
|
1017
921
|
*/
|
|
1018
|
-
|
|
1019
|
-
//#endregion
|
|
1020
922
|
exports.BasicLogIndexer = require_search.BasicLogIndexer;
|
|
1021
923
|
exports.BasicSearchEngine = require_search.BasicSearchEngine;
|
|
1022
924
|
exports.CorrelationEngine = require_search.CorrelationEngine;
|
|
1023
925
|
exports.DEFAULT_CONFIG = require_builder.DEFAULT_CONFIG;
|
|
1024
926
|
exports.DEFAULT_LOG_COLORS = require_builder.DEFAULT_LOG_COLORS;
|
|
1025
927
|
exports.DEFAULT_LOG_LEVELS = require_builder.DEFAULT_LOG_LEVELS;
|
|
1026
|
-
exports.DEFAULT_TRACE_HEADERS =
|
|
928
|
+
exports.DEFAULT_TRACE_HEADERS = require_request_trace.DEFAULT_TRACE_HEADERS;
|
|
1027
929
|
exports.DiscordTransport = require_slack_transport.DiscordTransport;
|
|
1028
930
|
exports.ErrorResponseBuilder = require_builder.ErrorResponseBuilder;
|
|
1029
931
|
exports.JsonFormatter = JsonFormatter;
|
|
@@ -1031,19 +933,19 @@ exports.LogLevel = require_builder.LogLevel;
|
|
|
1031
933
|
exports.LogixiaContext = require_async_context.LogixiaContext;
|
|
1032
934
|
exports.LogixiaException = require_builder.LogixiaException;
|
|
1033
935
|
exports.LogixiaLogger = require_builder.LogixiaLogger;
|
|
1034
|
-
exports.MAX_INCOMING_ID_LENGTH =
|
|
936
|
+
exports.MAX_INCOMING_ID_LENGTH = require_request_trace.MAX_INCOMING_ID_LENGTH;
|
|
1035
937
|
exports.MetricsPlugin = MetricsPlugin;
|
|
1036
938
|
exports.NLPSearchEngine = require_search.NLPSearchEngine;
|
|
1037
939
|
exports.OVERFLOW_LABEL_VALUE = OVERFLOW_LABEL_VALUE;
|
|
1038
|
-
exports.OtlpLogTransport = OtlpLogTransport;
|
|
940
|
+
exports.OtlpLogTransport = require_slack_transport.OtlpLogTransport;
|
|
1039
941
|
exports.PatternRecognitionEngine = require_search.PatternRecognitionEngine;
|
|
1040
942
|
exports.PluginRegistry = require_builder.PluginRegistry;
|
|
1041
943
|
exports.SearchManager = require_search.SearchManager;
|
|
1042
944
|
exports.SlackTransport = require_slack_transport.SlackTransport;
|
|
1043
|
-
exports.TRACE_CONTEXT_KEY =
|
|
945
|
+
exports.TRACE_CONTEXT_KEY = require_request_trace.TRACE_CONTEXT_KEY;
|
|
1044
946
|
exports.TextFormatter = TextFormatter;
|
|
1045
|
-
exports.TraceContext =
|
|
1046
|
-
exports._setActiveContextKey =
|
|
947
|
+
exports.TraceContext = require_request_trace.TraceContext;
|
|
948
|
+
exports._setActiveContextKey = require_request_trace._setActiveContextKey;
|
|
1047
949
|
exports._shutdownRegistrySize = require_builder._shutdownRegistrySize;
|
|
1048
950
|
exports.addEventFields = addEventFields;
|
|
1049
951
|
exports.applyRedaction = require_builder.applyRedaction;
|
|
@@ -1052,21 +954,21 @@ exports.createFastifyContextHook = require_async_context.createFastifyContextHoo
|
|
|
1052
954
|
exports.createLevelControlHandler = createLevelControlHandler;
|
|
1053
955
|
exports.createLogger = createLogger;
|
|
1054
956
|
exports.createMetricsPlugin = createMetricsPlugin;
|
|
1055
|
-
exports.createTraceMiddleware =
|
|
957
|
+
exports.createTraceMiddleware = require_request_trace.createTraceMiddleware;
|
|
1056
958
|
exports.createTypedLogger = createTypedLogger;
|
|
1057
959
|
exports.decycleValue = require_safe_stringify.decycleValue;
|
|
1058
960
|
exports.defineLogSchema = defineLogSchema;
|
|
1059
961
|
exports.deregisterFromShutdown = require_builder.deregisterFromShutdown;
|
|
1060
962
|
exports.disableOtelBridge = require_builder.disableOtelBridge;
|
|
1061
|
-
exports.extractTraceId =
|
|
963
|
+
exports.extractTraceId = require_request_trace.extractTraceId;
|
|
1062
964
|
exports.flushOnExit = require_builder.flushOnExit;
|
|
1063
965
|
exports.generateRequestId = require_builder.generateRequestId;
|
|
1064
966
|
exports.generateTraceId = require_builder.generateTraceId;
|
|
1065
967
|
exports.getActiveOtelContext = require_builder.getActiveOtelContext;
|
|
1066
|
-
exports.getCurrentTraceId =
|
|
968
|
+
exports.getCurrentTraceId = require_request_trace.getCurrentTraceId;
|
|
1067
969
|
exports.getEventFields = getEventFields;
|
|
1068
970
|
exports.getOtelMetaFields = require_builder.getOtelMetaFields;
|
|
1069
|
-
exports.getTraceContextKey =
|
|
971
|
+
exports.getTraceContextKey = require_request_trace.getTraceContextKey;
|
|
1070
972
|
exports.globalPluginRegistry = require_builder.globalPluginRegistry;
|
|
1071
973
|
exports.initOtelBridge = require_builder.initOtelBridge;
|
|
1072
974
|
exports.isError = require_builder.isError;
|
|
@@ -1078,16 +980,17 @@ exports.registerForShutdown = require_builder.registerForShutdown;
|
|
|
1078
980
|
exports.registerLevelSignal = registerLevelSignal;
|
|
1079
981
|
exports.resetShutdownHandlers = require_builder.resetShutdownHandlers;
|
|
1080
982
|
exports.retrocycle = require_safe_stringify.retrocycle;
|
|
1081
|
-
exports.runWithTraceId =
|
|
983
|
+
exports.runWithTraceId = require_request_trace.runWithTraceId;
|
|
1082
984
|
exports.safeStringify = require_safe_stringify.safeStringify;
|
|
1083
|
-
exports.sanitizeIncomingId =
|
|
985
|
+
exports.sanitizeIncomingId = require_request_trace.sanitizeIncomingId;
|
|
1084
986
|
exports.serializeError = require_builder.serializeError;
|
|
1085
987
|
exports.setEventField = setEventField;
|
|
1086
|
-
exports.setTraceId =
|
|
988
|
+
exports.setTraceId = require_request_trace.setTraceId;
|
|
1087
989
|
exports.stringifyForLog = require_safe_stringify.stringifyForLog;
|
|
1088
|
-
exports.toOtelSeverity = toOtelSeverity;
|
|
1089
|
-
exports.traceStorage =
|
|
990
|
+
exports.toOtelSeverity = require_slack_transport.toOtelSeverity;
|
|
991
|
+
exports.traceStorage = require_request_trace.traceStorage;
|
|
1090
992
|
exports.usePlugin = require_builder.usePlugin;
|
|
1091
993
|
exports.wideEventMiddleware = wideEventMiddleware;
|
|
1092
994
|
exports.withWideEvent = withWideEvent;
|
|
995
|
+
|
|
1093
996
|
//# sourceMappingURL=index.js.map
|