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.mjs
CHANGED
|
@@ -1,17 +1,14 @@
|
|
|
1
|
-
import { n as
|
|
2
|
-
import { i as
|
|
3
|
-
import {
|
|
4
|
-
import "./
|
|
5
|
-
import {
|
|
6
|
-
import { n as
|
|
7
|
-
import {
|
|
8
|
-
import { t as
|
|
9
|
-
import {
|
|
10
|
-
import { n as DiscordTransport, t as SlackTransport } from "./slack.transport-Bzw7sucI.mjs";
|
|
11
|
-
import { a as BasicSearchEngine, i as CorrelationEngine, n as PatternRecognitionEngine, o as BasicLogIndexer, r as NLPSearchEngine, t as SearchManager } from "./search-BFbu_oVn.mjs";
|
|
1
|
+
import { C as globalPluginRegistry, D as DEFAULT_LOG_LEVELS, E as DEFAULT_LOG_COLORS, O as LogLevel, S as PluginRegistry, T as DEFAULT_CONFIG, _ as getOtelMetaFields, a as isLogixiaException, b as normalizeError, c as _shutdownRegistrySize, d as registerForShutdown, f as resetShutdownHandlers, g as getActiveOtelContext, h as disableOtelBridge, i as LogixiaException, l as deregisterFromShutdown, m as redactObject, n as generateRequestId, o as LogixiaLogger, p as applyRedaction, r as generateTraceId, s as createLogger$1, t as ErrorResponseBuilder, u as flushOnExit, v as initOtelBridge, w as usePlugin, x as serializeError, y as isError } from "./builder-D70z6kjj.mjs";
|
|
2
|
+
import { a as TRACE_CONTEXT_KEY, c as createTraceMiddleware, d as getTraceContextKey, f as runWithTraceId, h as traceStorage, i as MAX_INCOMING_ID_LENGTH, l as extractTraceId, m as setTraceId, o as TraceContext, p as sanitizeIncomingId, r as DEFAULT_TRACE_HEADERS, s as _setActiveContextKey, u as getCurrentTraceId } from "./request-trace-C_fvIDv4.mjs";
|
|
3
|
+
import { n as createExpressContextMiddleware, r as createFastifyContextHook, t as LogixiaContext } from "./async-context-B05ArHgM.mjs";
|
|
4
|
+
import { n as internalLog, r as internalWarn } from "./internal-log-uCSd1PMc.mjs";
|
|
5
|
+
import { t as safeToString } from "./coerce.utils-B_rEudCn.mjs";
|
|
6
|
+
import { i as stringifyForLog, n as retrocycle, r as safeStringify, t as decycleValue } from "./safe-stringify-BMRl3EX3.mjs";
|
|
7
|
+
import { d as stripControlChars } from "./transport.manager-eZ_EeC00.mjs";
|
|
8
|
+
import { i as toOtelSeverity, n as DiscordTransport, r as OtlpLogTransport, t as SlackTransport } from "./slack.transport-Ce96JBDk.mjs";
|
|
9
|
+
import { a as BasicSearchEngine, i as CorrelationEngine, n as PatternRecognitionEngine, o as BasicLogIndexer, r as NLPSearchEngine, t as SearchManager } from "./search-CWMVYC-R.mjs";
|
|
12
10
|
import { AsyncLocalStorage } from "node:async_hooks";
|
|
13
|
-
|
|
14
|
-
//#region src/formatters/json.formatter.ts
|
|
11
|
+
// src/formatters/json.formatter.ts
|
|
15
12
|
/**
|
|
16
13
|
* Build a JSON.stringify replacer that replaces circular references with the
|
|
17
14
|
* string '[Circular]' instead of throwing. A fresh replacer must be created per
|
|
@@ -75,9 +72,7 @@ var JsonFormatter = class {
|
|
|
75
72
|
return serialized;
|
|
76
73
|
}
|
|
77
74
|
};
|
|
78
|
-
|
|
79
|
-
//#endregion
|
|
80
|
-
//#region src/formatters/text.formatter.ts
|
|
75
|
+
// src/formatters/text.formatter.ts
|
|
81
76
|
const stripControls = (value) => stripControlChars(safeToString(value));
|
|
82
77
|
var TextFormatter = class TextFormatter {
|
|
83
78
|
constructor(options = {}) {
|
|
@@ -139,7 +134,6 @@ var TextFormatter = class TextFormatter {
|
|
|
139
134
|
switch (this.timestampFormat) {
|
|
140
135
|
case "iso": return date.toISOString();
|
|
141
136
|
case "short": return date.toLocaleTimeString();
|
|
142
|
-
case "locale":
|
|
143
137
|
default: return date.toLocaleString();
|
|
144
138
|
}
|
|
145
139
|
}
|
|
@@ -197,9 +191,7 @@ var TextFormatter = class TextFormatter {
|
|
|
197
191
|
});
|
|
198
192
|
}
|
|
199
193
|
};
|
|
200
|
-
|
|
201
|
-
//#endregion
|
|
202
|
-
//#region src/utils/runtime-control.ts
|
|
194
|
+
// src/utils/runtime-control.ts
|
|
203
195
|
const DEFAULT_CYCLE = [
|
|
204
196
|
"error",
|
|
205
197
|
"warn",
|
|
@@ -216,13 +208,14 @@ const DEFAULT_CYCLE = [
|
|
|
216
208
|
* memorizable command (`kill -USR2 <pid>`) is enough to ratchet verbosity up
|
|
217
209
|
* while chasing a bug and back down again — no value to remember.
|
|
218
210
|
*/
|
|
219
|
-
function registerLevelSignal(logger
|
|
211
|
+
function registerLevelSignal(logger, options = {}) {
|
|
220
212
|
const signal = options.signal ?? "SIGUSR2";
|
|
221
213
|
const cycle = options.cycle && options.cycle.length > 0 ? options.cycle : [...DEFAULT_CYCLE];
|
|
222
214
|
const handler = () => {
|
|
223
|
-
const current = logger
|
|
224
|
-
const
|
|
225
|
-
|
|
215
|
+
const current = logger.getLevel();
|
|
216
|
+
const idx = cycle.indexOf(current);
|
|
217
|
+
const next = cycle[(idx + 1) % cycle.length];
|
|
218
|
+
logger.setLevel(next);
|
|
226
219
|
internalLog(`runtime level changed via ${signal}: ${current} → ${next}`);
|
|
227
220
|
};
|
|
228
221
|
process.on(signal, handler);
|
|
@@ -231,7 +224,7 @@ function registerLevelSignal(logger$1, options = {}) {
|
|
|
231
224
|
};
|
|
232
225
|
}
|
|
233
226
|
/** Maximum accepted request body size for the level control handler. */
|
|
234
|
-
const MAX_BODY_BYTES =
|
|
227
|
+
const MAX_BODY_BYTES = 16384;
|
|
235
228
|
function isJsonContentType(req) {
|
|
236
229
|
var _req$headers;
|
|
237
230
|
const raw = (_req$headers = req.headers) === null || _req$headers === void 0 ? void 0 : _req$headers["content-type"];
|
|
@@ -239,7 +232,7 @@ function isJsonContentType(req) {
|
|
|
239
232
|
if (typeof value !== "string") return false;
|
|
240
233
|
return value.split(";")[0].trim().toLowerCase() === "application/json";
|
|
241
234
|
}
|
|
242
|
-
const VALID_LEVELS = new Set([
|
|
235
|
+
const VALID_LEVELS = /* @__PURE__ */ new Set([
|
|
243
236
|
"error",
|
|
244
237
|
"warn",
|
|
245
238
|
"info",
|
|
@@ -268,13 +261,13 @@ const VALID_LEVELS = new Set([
|
|
|
268
261
|
* which also keeps cross-site form posts out) and a body of at most 16 KB
|
|
269
262
|
* (otherwise 413).
|
|
270
263
|
*/
|
|
271
|
-
function createLevelControlHandler(logger
|
|
264
|
+
function createLevelControlHandler(logger, options = {}) {
|
|
272
265
|
const allowed = options.allowedLevels && options.allowedLevels.length > 0 ? new Set(options.allowedLevels.map((l) => l.toLowerCase())) : VALID_LEVELS;
|
|
273
266
|
const snapshot = () => {
|
|
274
267
|
var _logger$getNamespaceL;
|
|
275
268
|
return {
|
|
276
|
-
level: logger
|
|
277
|
-
namespaceLevels: ((_logger$getNamespaceL = logger
|
|
269
|
+
level: logger.getLevel(),
|
|
270
|
+
namespaceLevels: ((_logger$getNamespaceL = logger.getNamespaceLevels) === null || _logger$getNamespaceL === void 0 ? void 0 : _logger$getNamespaceL.call(logger)) ?? {}
|
|
278
271
|
};
|
|
279
272
|
};
|
|
280
273
|
const send = (res, status, body) => {
|
|
@@ -300,7 +293,7 @@ function createLevelControlHandler(logger$1, options = {}) {
|
|
|
300
293
|
});
|
|
301
294
|
return;
|
|
302
295
|
}
|
|
303
|
-
logger
|
|
296
|
+
logger.setLevel(lvl);
|
|
304
297
|
}
|
|
305
298
|
if (parsed.namespaceLevels !== void 0) {
|
|
306
299
|
if (typeof parsed.namespaceLevels !== "object" || parsed.namespaceLevels === null || Array.isArray(parsed.namespaceLevels)) {
|
|
@@ -312,9 +305,9 @@ function createLevelControlHandler(logger$1, options = {}) {
|
|
|
312
305
|
send(res, 400, { error: `unknown level "${String(lvl)}" for namespace "${pat}"` });
|
|
313
306
|
return;
|
|
314
307
|
}
|
|
315
|
-
if (logger
|
|
308
|
+
if (logger.setNamespaceLevels) {
|
|
316
309
|
const coerced = Object.fromEntries(Object.entries(nl).map(([pat, lvl]) => [pat, String(lvl).toLowerCase()]));
|
|
317
|
-
logger
|
|
310
|
+
logger.setNamespaceLevels(coerced);
|
|
318
311
|
} else internalWarn("level control: logger does not support setNamespaceLevels — ignored");
|
|
319
312
|
}
|
|
320
313
|
send(res, 200, snapshot());
|
|
@@ -376,9 +369,54 @@ function createLevelControlHandler(logger$1, options = {}) {
|
|
|
376
369
|
send(res, 405, { error: `method ${method} not allowed` });
|
|
377
370
|
};
|
|
378
371
|
}
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
372
|
+
// src/utils/typed-logger.ts
|
|
373
|
+
/**
|
|
374
|
+
* logixia — TypeScript typed log fields
|
|
375
|
+
*
|
|
376
|
+
* Solves the type-safety gap: standard `Record<string, unknown>` metadata gives
|
|
377
|
+
* zero IDE autocomplete and lets typos slip silently into production logs.
|
|
378
|
+
*
|
|
379
|
+
* Two complementary utilities:
|
|
380
|
+
*
|
|
381
|
+
* 1. `createTypedLogger<TFields>()` — wraps any IBaseLogger so that the second
|
|
382
|
+
* argument of every log method is constrained to `TFields` (a typed object).
|
|
383
|
+
* Compile-time safety, zero runtime overhead.
|
|
384
|
+
*
|
|
385
|
+
* 2. `defineLogSchema<TFields>(schema)` — declares expected fields with optional
|
|
386
|
+
* validators. In development (NODE_ENV !== 'production') every log call is
|
|
387
|
+
* validated against the schema and a warning is emitted for missing required
|
|
388
|
+
* fields or type mismatches.
|
|
389
|
+
*
|
|
390
|
+
* @example
|
|
391
|
+
* ```ts
|
|
392
|
+
* import { createTypedLogger, defineLogSchema } from 'logixia';
|
|
393
|
+
*
|
|
394
|
+
* interface OrderFields {
|
|
395
|
+
* orderId: string;
|
|
396
|
+
* userId: string;
|
|
397
|
+
* amount?: number;
|
|
398
|
+
* currency?: string;
|
|
399
|
+
* }
|
|
400
|
+
*
|
|
401
|
+
* const schema = defineLogSchema<OrderFields>({
|
|
402
|
+
* orderId: { type: 'string', required: true },
|
|
403
|
+
* userId: { type: 'string', required: true },
|
|
404
|
+
* amount: { type: 'number' },
|
|
405
|
+
* currency: { type: 'string' },
|
|
406
|
+
* });
|
|
407
|
+
*
|
|
408
|
+
* const orderLogger = createTypedLogger<OrderFields>(baseLogger, schema);
|
|
409
|
+
* await orderLogger.info('Order created', { orderId: 'ord_123', userId: 'usr_456', amount: 99.99 });
|
|
410
|
+
* // ^^^^ fully typed autocomplete ^^^^
|
|
411
|
+
* ```
|
|
412
|
+
*/
|
|
413
|
+
function isProduction() {
|
|
414
|
+
try {
|
|
415
|
+
return process.env.NODE_ENV === "production";
|
|
416
|
+
} catch {
|
|
417
|
+
return false;
|
|
418
|
+
}
|
|
419
|
+
}
|
|
382
420
|
/**
|
|
383
421
|
* Define a typed schema for a category of log entries.
|
|
384
422
|
*
|
|
@@ -389,7 +427,7 @@ function defineLogSchema(fields) {
|
|
|
389
427
|
return {
|
|
390
428
|
fields,
|
|
391
429
|
validate(payload) {
|
|
392
|
-
if (
|
|
430
|
+
if (isProduction()) return [];
|
|
393
431
|
const warnings = [];
|
|
394
432
|
for (const [key, def] of Object.entries(fields)) {
|
|
395
433
|
const value = payload[key];
|
|
@@ -416,7 +454,7 @@ function defineLogSchema(fields) {
|
|
|
416
454
|
* @param logger Any object that implements `IBaseLogger` (e.g. the result of `createLogger()`)
|
|
417
455
|
* @param schema Optional schema for dev-time validation. Created with `defineLogSchema()`.
|
|
418
456
|
*/
|
|
419
|
-
function createTypedLogger(logger
|
|
457
|
+
function createTypedLogger(logger, schema) {
|
|
420
458
|
function withValidation(level, fn, message, data) {
|
|
421
459
|
if (schema && data) {
|
|
422
460
|
const warnings = schema.validate(data);
|
|
@@ -425,25 +463,56 @@ function createTypedLogger(logger$1, schema) {
|
|
|
425
463
|
return fn(message, data);
|
|
426
464
|
}
|
|
427
465
|
return {
|
|
428
|
-
raw: logger
|
|
466
|
+
raw: logger,
|
|
429
467
|
error(messageOrError, data) {
|
|
430
468
|
if (schema && data) {
|
|
431
469
|
const warnings = schema.validate(data);
|
|
432
470
|
const display = messageOrError instanceof Error ? messageOrError.message : messageOrError;
|
|
433
471
|
for (const w of warnings) internalWarn(`[logixia/schema] ${w} — level=error message="${display}"`);
|
|
434
472
|
}
|
|
435
|
-
return logger
|
|
473
|
+
return logger.error(messageOrError, data);
|
|
436
474
|
},
|
|
437
|
-
warn: (m, d) => withValidation("warn", logger
|
|
438
|
-
info: (m, d) => withValidation("info", logger
|
|
439
|
-
debug: (m, d) => withValidation("debug", logger
|
|
440
|
-
verbose: (m, d) => withValidation("verbose", (logger
|
|
441
|
-
trace: (m, d) => withValidation("trace", (logger
|
|
475
|
+
warn: (m, d) => withValidation("warn", logger.warn.bind(logger), m, d),
|
|
476
|
+
info: (m, d) => withValidation("info", logger.info.bind(logger), m, d),
|
|
477
|
+
debug: (m, d) => withValidation("debug", logger.debug.bind(logger), m, d),
|
|
478
|
+
verbose: (m, d) => withValidation("verbose", (logger.verbose ?? logger.debug).bind(logger), m, d),
|
|
479
|
+
trace: (m, d) => withValidation("trace", (logger.trace ?? logger.debug).bind(logger), m, d)
|
|
442
480
|
};
|
|
443
481
|
}
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
482
|
+
// src/wide-events.ts
|
|
483
|
+
/**
|
|
484
|
+
* logixia — Canonical Log Lines / Wide Events.
|
|
485
|
+
*
|
|
486
|
+
* Emit ONE dense, structured event per unit of work (usually a request) instead
|
|
487
|
+
* of scattering details across many narrow log lines. Fields are accumulated as
|
|
488
|
+
* the request flows through middleware and business logic, then the whole event
|
|
489
|
+
* is emitted ONCE — in a `finally`/teardown path so it fires even on errors.
|
|
490
|
+
*
|
|
491
|
+
* This is the "canonical log line" pattern (Stripe) / "wide events" /
|
|
492
|
+
* "Observability 2.0" (Honeycomb): one pre-joined, queryable record per request,
|
|
493
|
+
* so operators never JOIN across log lines during an incident. It composes with
|
|
494
|
+
* logixia's existing trace correlation — when a trace is active, the event
|
|
495
|
+
* carries `traceId`/`spanId`, making it OTel-friendly.
|
|
496
|
+
*
|
|
497
|
+
* @example Manual scope
|
|
498
|
+
* ```ts
|
|
499
|
+
* import { withWideEvent, addEventFields } from 'logixia';
|
|
500
|
+
*
|
|
501
|
+
* await withWideEvent(logger, { route: '/checkout' }, async () => {
|
|
502
|
+
* addEventFields({ userId, planTier }); // from anywhere in the call tree
|
|
503
|
+
* addEventFields({ dbQueries: 4, cacheHit });
|
|
504
|
+
* // ...one wide event is emitted automatically when this callback settles,
|
|
505
|
+
* // even if it throws.
|
|
506
|
+
* });
|
|
507
|
+
* ```
|
|
508
|
+
*
|
|
509
|
+
* @example Express middleware (auto-emit on response finish/close)
|
|
510
|
+
* ```ts
|
|
511
|
+
* import { wideEventMiddleware } from 'logixia';
|
|
512
|
+
* app.use(wideEventMiddleware(logger));
|
|
513
|
+
* app.get('/x', (req, res) => { addEventFields({ handled: 'x' }); res.json({}); });
|
|
514
|
+
* ```
|
|
515
|
+
*/
|
|
447
516
|
const _storage = new AsyncLocalStorage();
|
|
448
517
|
/**
|
|
449
518
|
* Merge fields into the wide event for the current async scope. No-op (with no
|
|
@@ -464,7 +533,7 @@ function getEventFields() {
|
|
|
464
533
|
const state = _storage.getStore();
|
|
465
534
|
return state ? { ...state.fields } : void 0;
|
|
466
535
|
}
|
|
467
|
-
function emit(logger
|
|
536
|
+
function emit(logger, state, options, extra) {
|
|
468
537
|
if (state.emitted) return;
|
|
469
538
|
state.emitted = true;
|
|
470
539
|
const level = options.level ?? "info";
|
|
@@ -478,7 +547,7 @@ function emit(logger$1, state, options, extra) {
|
|
|
478
547
|
const traceId = getCurrentTraceId();
|
|
479
548
|
if (traceId !== void 0 && payload["traceId"] === void 0) payload["traceId"] = traceId;
|
|
480
549
|
}
|
|
481
|
-
const p = logger
|
|
550
|
+
const p = logger.logLevel(level, message, payload);
|
|
482
551
|
if (p && typeof p.catch === "function") p.catch(() => {});
|
|
483
552
|
}
|
|
484
553
|
/**
|
|
@@ -487,7 +556,7 @@ function emit(logger$1, state, options, extra) {
|
|
|
487
556
|
* when the callback settles — on success OR error (the canonical "emit in
|
|
488
557
|
* finally" guarantee). On error, `error` + `errorMessage` fields are added.
|
|
489
558
|
*/
|
|
490
|
-
async function withWideEvent(logger
|
|
559
|
+
async function withWideEvent(logger, initialFields, callback, options = {}) {
|
|
491
560
|
const state = {
|
|
492
561
|
fields: { ...initialFields },
|
|
493
562
|
startMs: Date.now(),
|
|
@@ -496,10 +565,10 @@ async function withWideEvent(logger$1, initialFields, callback, options = {}) {
|
|
|
496
565
|
return _storage.run(state, async () => {
|
|
497
566
|
try {
|
|
498
567
|
const result = await callback();
|
|
499
|
-
emit(logger
|
|
568
|
+
emit(logger, state, options);
|
|
500
569
|
return result;
|
|
501
570
|
} catch (error) {
|
|
502
|
-
emit(logger
|
|
571
|
+
emit(logger, state, options, {
|
|
503
572
|
error: true,
|
|
504
573
|
errorMessage: error instanceof Error ? error.message : String(error)
|
|
505
574
|
});
|
|
@@ -514,7 +583,7 @@ async function withWideEvent(logger$1, initialFields, callback, options = {}) {
|
|
|
514
583
|
* more via `addEventFields`. The completion event includes `statusCode` and the
|
|
515
584
|
* request duration.
|
|
516
585
|
*/
|
|
517
|
-
function wideEventMiddleware(logger
|
|
586
|
+
function wideEventMiddleware(logger, options = {}) {
|
|
518
587
|
return function logixiaWideEventMiddleware(req, res, next) {
|
|
519
588
|
var _options$skip, _req$socket, _res$once, _res$once2;
|
|
520
589
|
if ((_options$skip = options.skip) === null || _options$skip === void 0 ? void 0 : _options$skip.call(options, req)) {
|
|
@@ -532,192 +601,14 @@ function wideEventMiddleware(logger$1, options = {}) {
|
|
|
532
601
|
emitted: false
|
|
533
602
|
};
|
|
534
603
|
const finalize = () => {
|
|
535
|
-
emit(logger
|
|
604
|
+
emit(logger, state, options, { statusCode: res.statusCode ?? 0 });
|
|
536
605
|
};
|
|
537
606
|
(_res$once = res.once) === null || _res$once === void 0 || _res$once.call(res, "finish", finalize);
|
|
538
607
|
(_res$once2 = res.once) === null || _res$once2 === void 0 || _res$once2.call(res, "close", finalize);
|
|
539
608
|
_storage.run(state, () => next());
|
|
540
609
|
};
|
|
541
610
|
}
|
|
542
|
-
|
|
543
|
-
//#endregion
|
|
544
|
-
//#region src/transports/otlp.transport.ts
|
|
545
|
-
const HEX_32 = /^[0-9a-f]{32}$/;
|
|
546
|
-
/**
|
|
547
|
-
* OTLP JSON wants a 32-char lowercase hex trace id. Dashed UUIDs are
|
|
548
|
-
* normalised; anything else (or all zeros) returns undefined.
|
|
549
|
-
*/
|
|
550
|
-
function toOtlpTraceId(id) {
|
|
551
|
-
const hex = id.replace(/-/g, "").toLowerCase();
|
|
552
|
-
return HEX_32.test(hex) && hex !== "0".repeat(32) ? hex : void 0;
|
|
553
|
-
}
|
|
554
|
-
/**
|
|
555
|
-
* Map a logixia level name to an OTel SeverityNumber (1–24) and text.
|
|
556
|
-
* Per the OTel logs SDK spec: TRACE=1, DEBUG=5, INFO=9, WARN=13, ERROR=17,
|
|
557
|
-
* FATAL=21. Custom/unknown levels fall back to INFO (9).
|
|
558
|
-
*/
|
|
559
|
-
function toOtelSeverity(level) {
|
|
560
|
-
switch (level.toLowerCase()) {
|
|
561
|
-
case "trace": return {
|
|
562
|
-
number: 1,
|
|
563
|
-
text: "TRACE"
|
|
564
|
-
};
|
|
565
|
-
case "verbose": return {
|
|
566
|
-
number: 5,
|
|
567
|
-
text: "DEBUG"
|
|
568
|
-
};
|
|
569
|
-
case "debug": return {
|
|
570
|
-
number: 5,
|
|
571
|
-
text: "DEBUG"
|
|
572
|
-
};
|
|
573
|
-
case "info": return {
|
|
574
|
-
number: 9,
|
|
575
|
-
text: "INFO"
|
|
576
|
-
};
|
|
577
|
-
case "warn":
|
|
578
|
-
case "warning": return {
|
|
579
|
-
number: 13,
|
|
580
|
-
text: "WARN"
|
|
581
|
-
};
|
|
582
|
-
case "error": return {
|
|
583
|
-
number: 17,
|
|
584
|
-
text: "ERROR"
|
|
585
|
-
};
|
|
586
|
-
case "fatal": return {
|
|
587
|
-
number: 21,
|
|
588
|
-
text: "FATAL"
|
|
589
|
-
};
|
|
590
|
-
default: return {
|
|
591
|
-
number: 9,
|
|
592
|
-
text: "INFO"
|
|
593
|
-
};
|
|
594
|
-
}
|
|
595
|
-
}
|
|
596
|
-
/** Coerce a JS value into an OTLP AnyValue. */
|
|
597
|
-
function toAnyValue(value) {
|
|
598
|
-
if (typeof value === "string") return { stringValue: value };
|
|
599
|
-
if (typeof value === "boolean") return { boolValue: value };
|
|
600
|
-
if (typeof value === "number") return Number.isInteger(value) ? { intValue: value } : { doubleValue: value };
|
|
601
|
-
if (typeof value === "bigint") return { stringValue: value.toString() };
|
|
602
|
-
if (value === null || value === void 0) return { stringValue: "" };
|
|
603
|
-
try {
|
|
604
|
-
return { stringValue: stringifyForLog(value) };
|
|
605
|
-
} catch {
|
|
606
|
-
return { stringValue: String(value) };
|
|
607
|
-
}
|
|
608
|
-
}
|
|
609
|
-
/** Build the OTLP KeyValue attribute list from a flat record. */
|
|
610
|
-
function toAttributes(rec) {
|
|
611
|
-
return Object.entries(rec).map(([key, value]) => ({
|
|
612
|
-
key,
|
|
613
|
-
value: toAnyValue(value)
|
|
614
|
-
}));
|
|
615
|
-
}
|
|
616
|
-
var OtlpLogTransport = class {
|
|
617
|
-
constructor(config) {
|
|
618
|
-
this.name = "otlp";
|
|
619
|
-
this.flushTimer = null;
|
|
620
|
-
this.url = config.url;
|
|
621
|
-
this.headers = config.headers ?? {};
|
|
622
|
-
this.batchSize = config.batchSize ?? 100;
|
|
623
|
-
this.flushIntervalMs = config.flushIntervalMs ?? 5e3;
|
|
624
|
-
this.requestTimeoutMs = config.requestTimeoutMs ?? DEFAULT_REQUEST_TIMEOUT_MS;
|
|
625
|
-
this.level = config.level;
|
|
626
|
-
this.buffer = new BatchBuffer({
|
|
627
|
-
name: "OtlpLogTransport",
|
|
628
|
-
batchSize: this.batchSize,
|
|
629
|
-
maxBufferSize: config.maxBufferSize ?? DEFAULT_MAX_BUFFER_SIZE,
|
|
630
|
-
send: (entries) => this.send(entries)
|
|
631
|
-
});
|
|
632
|
-
this.resourceAttrs = toAttributes({
|
|
633
|
-
"service.name": config.serviceName ?? "logixia",
|
|
634
|
-
...config.serviceVersion ? { "service.version": config.serviceVersion } : {},
|
|
635
|
-
...config.environment ? { "deployment.environment": config.environment } : {},
|
|
636
|
-
...config.resourceAttributes ?? {}
|
|
637
|
-
});
|
|
638
|
-
this.flushTimer = setInterval(() => {
|
|
639
|
-
this.flush().catch(() => {});
|
|
640
|
-
}, this.flushIntervalMs);
|
|
641
|
-
if (this.flushTimer.unref) this.flushTimer.unref();
|
|
642
|
-
}
|
|
643
|
-
write(entry) {
|
|
644
|
-
this.buffer.push(entry);
|
|
645
|
-
this.buffer.flushIfFull();
|
|
646
|
-
}
|
|
647
|
-
/** Convert one entry into an OTLP LogRecord. */
|
|
648
|
-
toLogRecord(entry) {
|
|
649
|
-
const sev = toOtelSeverity(entry.level);
|
|
650
|
-
const tsNanos = String(entry.timestamp.getTime() * 1e6);
|
|
651
|
-
const attrs = { ...entry.data ?? {} };
|
|
652
|
-
if (entry.context !== void 0) attrs["context"] = entry.context;
|
|
653
|
-
if (entry.appName !== void 0) attrs["app.name"] = entry.appName;
|
|
654
|
-
if (entry.environment !== void 0) attrs["deployment.environment"] = entry.environment;
|
|
655
|
-
const record = {
|
|
656
|
-
timeUnixNano: tsNanos,
|
|
657
|
-
observedTimeUnixNano: tsNanos,
|
|
658
|
-
severityNumber: sev.number,
|
|
659
|
-
severityText: sev.text,
|
|
660
|
-
body: { stringValue: entry.message },
|
|
661
|
-
attributes: toAttributes(attrs)
|
|
662
|
-
};
|
|
663
|
-
if (entry.traceId) {
|
|
664
|
-
const traceId = toOtlpTraceId(entry.traceId);
|
|
665
|
-
if (traceId) record["traceId"] = traceId;
|
|
666
|
-
else record["attributes"].push({
|
|
667
|
-
key: "trace_id",
|
|
668
|
-
value: { stringValue: entry.traceId }
|
|
669
|
-
});
|
|
670
|
-
}
|
|
671
|
-
return record;
|
|
672
|
-
}
|
|
673
|
-
buildPayload(entries) {
|
|
674
|
-
return stringifyForLog({ resourceLogs: [{
|
|
675
|
-
resource: { attributes: this.resourceAttrs },
|
|
676
|
-
scopeLogs: [{
|
|
677
|
-
scope: { name: "logixia" },
|
|
678
|
-
logRecords: entries.map((e) => this.toLogRecord(e))
|
|
679
|
-
}]
|
|
680
|
-
}] });
|
|
681
|
-
}
|
|
682
|
-
flush() {
|
|
683
|
-
return this.buffer.flush();
|
|
684
|
-
}
|
|
685
|
-
async send(entries) {
|
|
686
|
-
if (typeof fetch !== "function") {
|
|
687
|
-
internalWarn("OtlpLogTransport: global fetch unavailable — cannot export logs");
|
|
688
|
-
return;
|
|
689
|
-
}
|
|
690
|
-
const controller = new AbortController();
|
|
691
|
-
const timer = setTimeout(() => controller.abort(), this.requestTimeoutMs);
|
|
692
|
-
try {
|
|
693
|
-
const res = await fetch(this.url, {
|
|
694
|
-
method: "POST",
|
|
695
|
-
headers: {
|
|
696
|
-
"Content-Type": "application/json",
|
|
697
|
-
...this.headers
|
|
698
|
-
},
|
|
699
|
-
body: this.buildPayload(entries),
|
|
700
|
-
signal: controller.signal
|
|
701
|
-
});
|
|
702
|
-
if (!res.ok) throw new HttpError(res.status, "", "OTLP export");
|
|
703
|
-
} catch (err) {
|
|
704
|
-
if (controller.signal.aborted) throw new Error(`OTLP export timed out after ${this.requestTimeoutMs}ms`, { cause: err });
|
|
705
|
-
throw err;
|
|
706
|
-
} finally {
|
|
707
|
-
clearTimeout(timer);
|
|
708
|
-
}
|
|
709
|
-
}
|
|
710
|
-
async close() {
|
|
711
|
-
if (this.flushTimer) {
|
|
712
|
-
clearInterval(this.flushTimer);
|
|
713
|
-
this.flushTimer = null;
|
|
714
|
-
}
|
|
715
|
-
await this.buffer.close();
|
|
716
|
-
}
|
|
717
|
-
};
|
|
718
|
-
|
|
719
|
-
//#endregion
|
|
720
|
-
//#region src/metrics.ts
|
|
611
|
+
// src/metrics.ts
|
|
721
612
|
const DEFAULT_BUCKETS = [
|
|
722
613
|
1,
|
|
723
614
|
5,
|
|
@@ -859,9 +750,10 @@ var MetricsPlugin = class {
|
|
|
859
750
|
const helpText = config.help ?? rawName.replace(/_/g, " ");
|
|
860
751
|
lines.push(`# HELP ${metricName} ${helpText}`);
|
|
861
752
|
lines.push(`# TYPE ${metricName} ${config.type}`);
|
|
862
|
-
if (state.type === "counter")
|
|
863
|
-
|
|
864
|
-
|
|
753
|
+
if (state.type === "counter") {
|
|
754
|
+
if (state.values.size === 0) lines.push(`${metricName} 0`);
|
|
755
|
+
else for (const [labelKey, count] of state.values) lines.push(`${metricName}${renderLabels(labelKey)} ${count}`);
|
|
756
|
+
} else if (state.type === "histogram") for (const [labelKey, bucketCounts] of state.counts) {
|
|
865
757
|
const labelSuffix = renderLabels(labelKey);
|
|
866
758
|
const baseObj = labelKey === "{}" ? {} : JSON.parse(labelKey);
|
|
867
759
|
for (let i = 0; i < state.buckets.length; i++) {
|
|
@@ -879,8 +771,10 @@ var MetricsPlugin = class {
|
|
|
879
771
|
lines.push(`${metricName}_sum${labelSuffix} ${state.sums.get(labelKey) ?? 0}`);
|
|
880
772
|
lines.push(`${metricName}_count${labelSuffix} ${state.observations.get(labelKey) ?? 0}`);
|
|
881
773
|
}
|
|
882
|
-
else if (state.type === "gauge")
|
|
883
|
-
|
|
774
|
+
else if (state.type === "gauge") {
|
|
775
|
+
if (state.values.size === 0) lines.push(`${metricName} 0`);
|
|
776
|
+
else for (const [labelKey, val] of state.values) lines.push(`${metricName}${renderLabels(labelKey)} ${val}`);
|
|
777
|
+
}
|
|
884
778
|
}
|
|
885
779
|
return `${lines.join("\n")}\n`;
|
|
886
780
|
}
|
|
@@ -997,9 +891,20 @@ var MetricsPlugin = class {
|
|
|
997
891
|
function createMetricsPlugin(map, options) {
|
|
998
892
|
return new MetricsPlugin(map, options);
|
|
999
893
|
}
|
|
1000
|
-
|
|
1001
|
-
|
|
1002
|
-
|
|
894
|
+
// src/index.ts
|
|
895
|
+
/**
|
|
896
|
+
* Logixia - Advanced TypeScript Logger
|
|
897
|
+
*
|
|
898
|
+
* A comprehensive logging library with support for:
|
|
899
|
+
* - Multiple output formats (console, file, JSON)
|
|
900
|
+
* - Trace ID tracking
|
|
901
|
+
* - Performance monitoring
|
|
902
|
+
* - NestJS integration
|
|
903
|
+
* - Customizable log levels and colors
|
|
904
|
+
* - Intelligent log search and aggregation
|
|
905
|
+
* - Natural language query processing
|
|
906
|
+
* - Pattern recognition and anomaly detection
|
|
907
|
+
*/
|
|
1003
908
|
/**
|
|
1004
909
|
* Create a new Logixia logger instance with TypeScript support for custom levels
|
|
1005
910
|
* @param config - Logger configuration
|
|
@@ -1013,7 +918,6 @@ const logger = new LogixiaLogger(DEFAULT_CONFIG);
|
|
|
1013
918
|
/**
|
|
1014
919
|
* Export default configuration for reference
|
|
1015
920
|
*/
|
|
1016
|
-
|
|
1017
|
-
//#endregion
|
|
1018
921
|
export { BasicLogIndexer, BasicSearchEngine, CorrelationEngine, DEFAULT_CONFIG, DEFAULT_LOG_COLORS, DEFAULT_LOG_LEVELS, DEFAULT_TRACE_HEADERS, DiscordTransport, ErrorResponseBuilder, JsonFormatter, LogLevel, LogixiaContext, LogixiaException, LogixiaLogger, MAX_INCOMING_ID_LENGTH, MetricsPlugin, NLPSearchEngine, OVERFLOW_LABEL_VALUE, OtlpLogTransport, PatternRecognitionEngine, PluginRegistry, SearchManager, SlackTransport, TRACE_CONTEXT_KEY, TextFormatter, TraceContext, _setActiveContextKey, _shutdownRegistrySize, addEventFields, applyRedaction, createExpressContextMiddleware, createFastifyContextHook, createLevelControlHandler, createLogger, createMetricsPlugin, createTraceMiddleware, createTypedLogger, decycleValue, defineLogSchema, deregisterFromShutdown, disableOtelBridge, extractTraceId, flushOnExit, generateRequestId, generateTraceId, getActiveOtelContext, getCurrentTraceId, getEventFields, getOtelMetaFields, getTraceContextKey, globalPluginRegistry, initOtelBridge, isError, isLogixiaException, logger, normalizeError, redactObject, registerForShutdown, registerLevelSignal, resetShutdownHandlers, retrocycle, runWithTraceId, safeStringify, sanitizeIncomingId, serializeError, setEventField, setTraceId, stringifyForLog, toOtelSeverity, traceStorage, usePlugin, wideEventMiddleware, withWideEvent };
|
|
922
|
+
|
|
1019
923
|
//# sourceMappingURL=index.mjs.map
|