logixia 2.0.7 → 2.0.9
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 +10 -1
- package/dist/{builder-C_TgxEOW.mjs → builder-BlIJNIuk.mjs} +221 -82
- package/dist/builder-BlIJNIuk.mjs.map +1 -0
- package/dist/{builder-CzmM_4Ub.js → builder-Bs0qkfkY.js} +226 -82
- package/dist/builder-Bs0qkfkY.js.map +1 -0
- package/dist/index.d.mts +9 -1
- package/dist/index.d.mts.map +1 -1
- package/dist/index.d.ts +9 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/index.mjs +2 -2
- package/dist/{logitron-logger-Qh3y9-WH.d.ts → logitron-logger-DVUdgmBY.d.ts} +20 -1
- package/dist/logitron-logger-DVUdgmBY.d.ts.map +1 -0
- package/dist/{logitron-logger-sYuk8fOb.d.mts → logitron-logger-DoWmMjYB.d.mts} +20 -1
- package/dist/logitron-logger-DoWmMjYB.d.mts.map +1 -0
- package/dist/nest.d.mts +1 -1
- package/dist/nest.d.ts +1 -1
- package/dist/nest.js +1 -1
- package/dist/nest.mjs +1 -1
- package/package.json +1 -2
- package/dist/builder-C_TgxEOW.mjs.map +0 -1
- package/dist/builder-CzmM_4Ub.js.map +0 -1
- package/dist/logitron-logger-Qh3y9-WH.d.ts.map +0 -1
- package/dist/logitron-logger-sYuk8fOb.d.mts.map +0 -1
|
@@ -6,8 +6,6 @@ const require_internal_log = require("./internal-log-DwqTjhpb.js");
|
|
|
6
6
|
const require_coerce_utils = require("./coerce.utils-C1C5sIX0.js");
|
|
7
7
|
const require_safe_stringify = require("./safe-stringify-CN7icp8S.js");
|
|
8
8
|
const require_otel = require("./otel-ChnVYRLA.js");
|
|
9
|
-
let fast_json_stringify = require("fast-json-stringify");
|
|
10
|
-
fast_json_stringify = require_secret_config.__toESM(fast_json_stringify);
|
|
11
9
|
let node_os = require("node:os");
|
|
12
10
|
// src/types/index.ts
|
|
13
11
|
const LogLevel = {
|
|
@@ -195,6 +193,16 @@ const EXTRA_FIELDS = [
|
|
|
195
193
|
"port",
|
|
196
194
|
"type"
|
|
197
195
|
];
|
|
196
|
+
const SKIPPED_FIELDS = /* @__PURE__ */ new Set([
|
|
197
|
+
"name",
|
|
198
|
+
"message",
|
|
199
|
+
"stack",
|
|
200
|
+
"cause",
|
|
201
|
+
"errors",
|
|
202
|
+
...EXTRA_FIELDS
|
|
203
|
+
]);
|
|
204
|
+
const NO_OPTIONS = Object.freeze({});
|
|
205
|
+
const NO_FIELDS = [];
|
|
198
206
|
/**
|
|
199
207
|
* Serialize an Error into a plain JSON-safe object, including:
|
|
200
208
|
* - `name`, `message`, `stack`
|
|
@@ -203,8 +211,8 @@ const EXTRA_FIELDS = [
|
|
|
203
211
|
* - standard Node.js error fields (`code`, `statusCode`, `errno`, …)
|
|
204
212
|
* - any other enumerable own properties
|
|
205
213
|
*/
|
|
206
|
-
function serializeError(error, options =
|
|
207
|
-
const { includeStack = true, maxDepth = 5, excludeFields =
|
|
214
|
+
function serializeError(error, options = NO_OPTIONS) {
|
|
215
|
+
const { includeStack = true, maxDepth = 5, excludeFields = NO_FIELDS } = options;
|
|
208
216
|
return _serializeError(error, includeStack, maxDepth, excludeFields, 0, /* @__PURE__ */ new WeakSet());
|
|
209
217
|
}
|
|
210
218
|
function _serializeError(error, includeStack, maxDepth, excludeFields, depth, seen) {
|
|
@@ -232,16 +240,8 @@ function _serializeError(error, includeStack, maxDepth, excludeFields, depth, se
|
|
|
232
240
|
const aggregateError = error;
|
|
233
241
|
if (Array.isArray(aggregateError.errors)) serialized.errors = aggregateError.errors.map((e) => e instanceof Error ? _serializeError(e, includeStack, maxDepth, excludeFields, depth + 1, seen) : serializeValue(e, maxDepth - depth - 1, seen));
|
|
234
242
|
const errorRecord = error;
|
|
235
|
-
for (const field of EXTRA_FIELDS) if (!excludeFields.includes(field) &&
|
|
236
|
-
const skip = /* @__PURE__ */ new Set([
|
|
237
|
-
"name",
|
|
238
|
-
"message",
|
|
239
|
-
"stack",
|
|
240
|
-
"cause",
|
|
241
|
-
"errors",
|
|
242
|
-
...EXTRA_FIELDS,
|
|
243
|
-
...excludeFields
|
|
244
|
-
]);
|
|
243
|
+
for (const field of EXTRA_FIELDS) if (!excludeFields.includes(field) && errorRecord[field] !== void 0) serialized[field] = errorRecord[field];
|
|
244
|
+
const skip = excludeFields.length === 0 ? SKIPPED_FIELDS : /* @__PURE__ */ new Set([...SKIPPED_FIELDS, ...excludeFields]);
|
|
245
245
|
for (const key of Object.getOwnPropertyNames(error)) {
|
|
246
246
|
if (skip.has(key)) continue;
|
|
247
247
|
try {
|
|
@@ -297,6 +297,61 @@ function serializeValue(value, remainingDepth, seen) {
|
|
|
297
297
|
function isError(value) {
|
|
298
298
|
return value instanceof Error || Boolean(value) && typeof value === "object" && "name" in value && "message" in value;
|
|
299
299
|
}
|
|
300
|
+
const MAX_ERROR_SEARCH_DEPTH = 3;
|
|
301
|
+
const MAX_ERROR_SEARCH_NODES = 2e3;
|
|
302
|
+
/**
|
|
303
|
+
* Replaces real Error instances inside a log payload with their serialized form,
|
|
304
|
+
* because JSON output drops an Error's non-enumerable `message` and `stack`. Runs on
|
|
305
|
+
* every log call, so its work is capped and it copies nothing until it finds one.
|
|
306
|
+
* Duck-typed objects are data, and an Error with its own toJSON has already chosen
|
|
307
|
+
* what to show. The caller's objects are never mutated.
|
|
308
|
+
*/
|
|
309
|
+
function serializeNestedErrors(data) {
|
|
310
|
+
const outerBudget = errorSearchBudget;
|
|
311
|
+
errorSearchBudget = MAX_ERROR_SEARCH_NODES;
|
|
312
|
+
try {
|
|
313
|
+
return walkForErrors(data, MAX_ERROR_SEARCH_DEPTH, void 0, void 0);
|
|
314
|
+
} finally {
|
|
315
|
+
errorSearchBudget = outerBudget;
|
|
316
|
+
}
|
|
317
|
+
}
|
|
318
|
+
let errorSearchBudget = 0;
|
|
319
|
+
const hasOwn = Object.prototype.hasOwnProperty;
|
|
320
|
+
function walkForErrors(value, depth, parent, grandparent) {
|
|
321
|
+
if (value instanceof Error) return typeof value.toJSON === "function" ? value : serializeError(value);
|
|
322
|
+
if (depth === 0 || --errorSearchBudget < 0 || value === parent || value === grandparent) return value;
|
|
323
|
+
let copy;
|
|
324
|
+
if (Array.isArray(value)) for (let i = 0; i < value.length; i++) {
|
|
325
|
+
const item = value[i];
|
|
326
|
+
if (item === null || typeof item !== "object") continue;
|
|
327
|
+
const next = walkForErrors(item, depth - 1, value, parent);
|
|
328
|
+
if (next !== item) {
|
|
329
|
+
copy ??= value.slice();
|
|
330
|
+
copy[i] = next;
|
|
331
|
+
}
|
|
332
|
+
}
|
|
333
|
+
else {
|
|
334
|
+
const proto = Object.getPrototypeOf(value);
|
|
335
|
+
if (proto !== Object.prototype && proto !== null) return value;
|
|
336
|
+
const record = value;
|
|
337
|
+
for (const key in record) {
|
|
338
|
+
if (!hasOwn.call(record, key)) continue;
|
|
339
|
+
let item;
|
|
340
|
+
try {
|
|
341
|
+
item = record[key];
|
|
342
|
+
} catch {
|
|
343
|
+
continue;
|
|
344
|
+
}
|
|
345
|
+
if (item === null || typeof item !== "object") continue;
|
|
346
|
+
const next = walkForErrors(item, depth - 1, record, parent);
|
|
347
|
+
if (next !== item) {
|
|
348
|
+
copy ??= { ...record };
|
|
349
|
+
require_sensitive_names.assignOwn(copy, key, next);
|
|
350
|
+
}
|
|
351
|
+
}
|
|
352
|
+
}
|
|
353
|
+
return copy ?? value;
|
|
354
|
+
}
|
|
300
355
|
/**
|
|
301
356
|
* Coerce any thrown value into a proper Error instance.
|
|
302
357
|
*/
|
|
@@ -979,23 +1034,6 @@ function warnOnReservedLevelNames(levels) {
|
|
|
979
1034
|
* - Feature 4: Cause-chain error serialization (handled in error.utils)
|
|
980
1035
|
* - Feature 5: Adaptive log level based on NODE_ENV / CI detection
|
|
981
1036
|
*/
|
|
982
|
-
const _fastStringifyEntry = (0, fast_json_stringify.default)({
|
|
983
|
-
type: "object",
|
|
984
|
-
properties: {
|
|
985
|
-
timestamp: { type: "string" },
|
|
986
|
-
level: { type: "string" },
|
|
987
|
-
appName: { type: "string" },
|
|
988
|
-
environment: { type: "string" },
|
|
989
|
-
message: { type: "string" },
|
|
990
|
-
context: { type: "string" },
|
|
991
|
-
traceId: { type: "string" },
|
|
992
|
-
payload: {
|
|
993
|
-
type: "object",
|
|
994
|
-
additionalProperties: true
|
|
995
|
-
}
|
|
996
|
-
},
|
|
997
|
-
additionalProperties: true
|
|
998
|
-
});
|
|
999
1037
|
let _tsCacheMs = 0;
|
|
1000
1038
|
let _tsCacheStr = "";
|
|
1001
1039
|
function nowIso() {
|
|
@@ -1006,6 +1044,39 @@ function nowIso() {
|
|
|
1006
1044
|
}
|
|
1007
1045
|
return _tsCacheStr;
|
|
1008
1046
|
}
|
|
1047
|
+
const RESOLVED = Promise.resolve();
|
|
1048
|
+
const JSON_STRING_FIELDS = [
|
|
1049
|
+
"timestamp",
|
|
1050
|
+
"level",
|
|
1051
|
+
"appName",
|
|
1052
|
+
"environment",
|
|
1053
|
+
"message",
|
|
1054
|
+
"context",
|
|
1055
|
+
"traceId"
|
|
1056
|
+
];
|
|
1057
|
+
function toJsonString(value) {
|
|
1058
|
+
if (value === null) return "";
|
|
1059
|
+
if (value instanceof Date) return value.toISOString();
|
|
1060
|
+
if (value instanceof RegExp) return value.source;
|
|
1061
|
+
return String(value);
|
|
1062
|
+
}
|
|
1063
|
+
function toJsonEntry(entry) {
|
|
1064
|
+
const record = entry;
|
|
1065
|
+
let copy;
|
|
1066
|
+
for (const field of JSON_STRING_FIELDS) {
|
|
1067
|
+
const value = record[field];
|
|
1068
|
+
if (value !== void 0 && typeof value !== "string") {
|
|
1069
|
+
copy ??= { ...record };
|
|
1070
|
+
copy[field] = toJsonString(value);
|
|
1071
|
+
}
|
|
1072
|
+
}
|
|
1073
|
+
const payload = entry.payload;
|
|
1074
|
+
if (payload !== void 0 && (payload === null || typeof payload !== "object" || Array.isArray(payload))) {
|
|
1075
|
+
copy ??= { ...record };
|
|
1076
|
+
copy["payload"] = Object.assign({}, payload);
|
|
1077
|
+
}
|
|
1078
|
+
return copy ?? entry;
|
|
1079
|
+
}
|
|
1009
1080
|
function namespacePatternToRegex(pattern) {
|
|
1010
1081
|
const escaped = pattern.split(".").map((s) => s === "*" ? "[^.]+" : s.replace(/[$()*+.?[\\\]^{|}]/g, "\\$&")).join("\\.");
|
|
1011
1082
|
return new RegExp(`^${escaped}$`);
|
|
@@ -1087,6 +1158,11 @@ var LogixiaLogger = class LogixiaLogger {
|
|
|
1087
1158
|
this._hasContextData = false;
|
|
1088
1159
|
this._formattedLevels = /* @__PURE__ */ new Map();
|
|
1089
1160
|
this._formattedAppName = "";
|
|
1161
|
+
this._jsonHeads = /* @__PURE__ */ new Map();
|
|
1162
|
+
this._jsonHeadsApp = "";
|
|
1163
|
+
this._jsonHeadsEnv = "";
|
|
1164
|
+
this._jsonContextKey = void 0;
|
|
1165
|
+
this._jsonContext = "";
|
|
1090
1166
|
this._hasRedact = false;
|
|
1091
1167
|
this._nsSeenVersion = 0;
|
|
1092
1168
|
this._parent = parent;
|
|
@@ -1187,9 +1263,7 @@ var LogixiaLogger = class LogixiaLogger {
|
|
|
1187
1263
|
var _this$config$levelOpt3, _this$config$levelOpt4;
|
|
1188
1264
|
warnOnReservedLevelNames((_this$config$levelOpt3 = this.config.levelOptions) === null || _this$config$levelOpt3 === void 0 ? void 0 : _this$config$levelOpt3.levels);
|
|
1189
1265
|
if ((_this$config$levelOpt4 = this.config.levelOptions) === null || _this$config$levelOpt4 === void 0 ? void 0 : _this$config$levelOpt4.levels) {
|
|
1190
|
-
for (const levelName of Object.keys(this.config.levelOptions.levels)) if (!this[levelName.toLowerCase()]) this[levelName.toLowerCase()] =
|
|
1191
|
-
await this.logLevel(levelName.toLowerCase(), message, data);
|
|
1192
|
-
};
|
|
1266
|
+
for (const levelName of Object.keys(this.config.levelOptions.levels)) if (!this[levelName.toLowerCase()]) this[levelName.toLowerCase()] = (message, data) => this.logLevel(levelName.toLowerCase(), message, data);
|
|
1193
1267
|
}
|
|
1194
1268
|
}
|
|
1195
1269
|
/**
|
|
@@ -1291,40 +1365,53 @@ var LogixiaLogger = class LogixiaLogger {
|
|
|
1291
1365
|
* (name, message, stack) under `data.error`; a string is logged as-is.
|
|
1292
1366
|
* `data` is merged into the entry payload.
|
|
1293
1367
|
*/
|
|
1294
|
-
|
|
1295
|
-
|
|
1296
|
-
|
|
1297
|
-
|
|
1298
|
-
|
|
1299
|
-
|
|
1368
|
+
error(messageOrError, data) {
|
|
1369
|
+
try {
|
|
1370
|
+
return isError(messageOrError) ? this._run("error", messageOrError.message, {
|
|
1371
|
+
...data,
|
|
1372
|
+
error: serializeError(messageOrError)
|
|
1373
|
+
}) : this._run("error", messageOrError, data);
|
|
1374
|
+
} catch (error) {
|
|
1375
|
+
return Promise.reject(error);
|
|
1376
|
+
}
|
|
1300
1377
|
}
|
|
1301
1378
|
/** Log `message` at `warn` level; `data` is merged into the entry payload. */
|
|
1302
|
-
|
|
1303
|
-
|
|
1379
|
+
warn(message, data) {
|
|
1380
|
+
return this._run("warn", message, data);
|
|
1304
1381
|
}
|
|
1305
1382
|
/** Log `message` at `info` level; `data` is merged into the entry payload. */
|
|
1306
|
-
|
|
1307
|
-
|
|
1383
|
+
info(message, data) {
|
|
1384
|
+
return this._run("info", message, data);
|
|
1308
1385
|
}
|
|
1309
1386
|
/** Log `message` at `debug` level; `data` is merged into the entry payload. */
|
|
1310
|
-
|
|
1311
|
-
|
|
1387
|
+
debug(message, data) {
|
|
1388
|
+
return this._run("debug", message, data);
|
|
1312
1389
|
}
|
|
1313
1390
|
/** Log `message` at `trace` level; `data` is merged into the entry payload. */
|
|
1314
|
-
|
|
1315
|
-
|
|
1391
|
+
trace(message, data) {
|
|
1392
|
+
return this._run("trace", message, data);
|
|
1316
1393
|
}
|
|
1317
1394
|
/** Log `message` at `verbose` level; `data` is merged into the entry payload. */
|
|
1318
|
-
|
|
1319
|
-
|
|
1395
|
+
verbose(message, data) {
|
|
1396
|
+
return this._run("verbose", message, data);
|
|
1320
1397
|
}
|
|
1321
1398
|
/**
|
|
1322
1399
|
* Log at an arbitrary level name, including custom levels. Levels below the
|
|
1323
1400
|
* active threshold are dropped, as are level names that are not registered
|
|
1324
1401
|
* in `levelOptions.levels` (and are not built-in).
|
|
1325
1402
|
*/
|
|
1326
|
-
|
|
1327
|
-
|
|
1403
|
+
logLevel(level, message, data) {
|
|
1404
|
+
return this._run(level, message, data);
|
|
1405
|
+
}
|
|
1406
|
+
_run(level, message, data) {
|
|
1407
|
+
try {
|
|
1408
|
+
return this._settle(this.log(level, message, data));
|
|
1409
|
+
} catch (error) {
|
|
1410
|
+
return Promise.reject(error);
|
|
1411
|
+
}
|
|
1412
|
+
}
|
|
1413
|
+
_settle(out) {
|
|
1414
|
+
return out ?? RESOLVED;
|
|
1328
1415
|
}
|
|
1329
1416
|
/** Start a named timer; finish it with {@link timeEnd}. Reusing a label restarts it. */
|
|
1330
1417
|
time(label) {
|
|
@@ -1630,12 +1717,15 @@ var LogixiaLogger = class LogixiaLogger {
|
|
|
1630
1717
|
await this._pluginRegistry.runOnShutdown();
|
|
1631
1718
|
deregisterFromShutdown(this);
|
|
1632
1719
|
}
|
|
1633
|
-
|
|
1634
|
-
|
|
1720
|
+
/** Returns a Promise only when a plugin or a transport is asynchronous. */
|
|
1721
|
+
log(level, message, rawData) {
|
|
1722
|
+
const config = this.config;
|
|
1723
|
+
if (config.silent) return;
|
|
1635
1724
|
if (!this.shouldLog(level)) return;
|
|
1725
|
+
const data = rawData instanceof Error ? { error: serializeError(rawData) } : rawData;
|
|
1636
1726
|
const alsContext = require_async_context.LogixiaContext.get();
|
|
1637
1727
|
let activeTraceId;
|
|
1638
|
-
if (
|
|
1728
|
+
if (config.traceId) {
|
|
1639
1729
|
const ctxTraceId = alsContext === null || alsContext === void 0 ? void 0 : alsContext.traceId;
|
|
1640
1730
|
activeTraceId = require_request_trace.TraceContext.instance.getCurrentTraceId() ?? (typeof ctxTraceId === "string" ? ctxTraceId : void 0);
|
|
1641
1731
|
}
|
|
@@ -1643,7 +1733,7 @@ var LogixiaLogger = class LogixiaLogger {
|
|
|
1643
1733
|
const hasAls = alsContext !== void 0 && Object.keys(alsContext).length > 0;
|
|
1644
1734
|
const otelFields = require_otel._isOtelBridgeEnabled() ? require_otel._getOtelPayloadIfEnabled() : void 0;
|
|
1645
1735
|
const hasOtel = otelFields !== void 0 && Object.keys(otelFields).length > 0;
|
|
1646
|
-
const traceId =
|
|
1736
|
+
const traceId = config.traceId ? activeTraceId ?? this.fallbackTraceId : void 0;
|
|
1647
1737
|
let mergedData;
|
|
1648
1738
|
if (hasAls) {
|
|
1649
1739
|
const als = { ...alsContext };
|
|
@@ -1658,14 +1748,19 @@ var LogixiaLogger = class LogixiaLogger {
|
|
|
1658
1748
|
...data
|
|
1659
1749
|
};
|
|
1660
1750
|
else mergedData = data;
|
|
1661
|
-
|
|
1751
|
+
let rawPayload = this._hasContextData ? {
|
|
1662
1752
|
...this.contextData,
|
|
1663
1753
|
...mergedData
|
|
1664
1754
|
} : mergedData;
|
|
1755
|
+
if (rawPayload) try {
|
|
1756
|
+
rawPayload = serializeNestedErrors(rawPayload);
|
|
1757
|
+
} catch (error) {
|
|
1758
|
+
require_internal_log.internalError("Error serialization failed", error);
|
|
1759
|
+
}
|
|
1665
1760
|
let payload;
|
|
1666
1761
|
if (rawPayload !== void 0 && rawPayload !== null) {
|
|
1667
1762
|
if (this._hasRedact) try {
|
|
1668
|
-
payload = applyRedaction(rawPayload,
|
|
1763
|
+
payload = applyRedaction(rawPayload, config.redact) ?? rawPayload;
|
|
1669
1764
|
} catch (error) {
|
|
1670
1765
|
require_internal_log.internalError("Redaction failed", error);
|
|
1671
1766
|
payload = { redaction: REDACTION_FAILED };
|
|
@@ -1674,7 +1769,7 @@ var LogixiaLogger = class LogixiaLogger {
|
|
|
1674
1769
|
}
|
|
1675
1770
|
let safeMessage = message;
|
|
1676
1771
|
if (this._hasRedact) try {
|
|
1677
|
-
safeMessage = applyRedactionToString(message,
|
|
1772
|
+
safeMessage = applyRedactionToString(message, config.redact);
|
|
1678
1773
|
} catch (error) {
|
|
1679
1774
|
require_internal_log.internalError("Redaction failed", error);
|
|
1680
1775
|
safeMessage = REDACTION_FAILED;
|
|
@@ -1682,20 +1777,20 @@ var LogixiaLogger = class LogixiaLogger {
|
|
|
1682
1777
|
const entry = {
|
|
1683
1778
|
timestamp: nowIso(),
|
|
1684
1779
|
level,
|
|
1685
|
-
appName:
|
|
1686
|
-
environment:
|
|
1780
|
+
appName: config.appName ?? "App",
|
|
1781
|
+
environment: config.environment ?? "development",
|
|
1687
1782
|
message: safeMessage
|
|
1688
1783
|
};
|
|
1689
1784
|
if (this.context) entry.context = this.context;
|
|
1690
|
-
if (payload !== void 0) entry.payload = payload;
|
|
1691
1785
|
if (traceId !== void 0) entry.traceId = traceId;
|
|
1692
|
-
|
|
1693
|
-
if (this._pluginRegistry.size > 0)
|
|
1694
|
-
|
|
1695
|
-
|
|
1696
|
-
|
|
1697
|
-
const
|
|
1698
|
-
if (
|
|
1786
|
+
if (payload !== void 0) entry.payload = payload;
|
|
1787
|
+
if (this._pluginRegistry.size > 0) return this._logThroughPlugins(entry, level);
|
|
1788
|
+
return this.output(entry, level);
|
|
1789
|
+
}
|
|
1790
|
+
async _logThroughPlugins(entry, level) {
|
|
1791
|
+
const finalEntry = await this._pluginRegistry.runOnLog(entry);
|
|
1792
|
+
if (finalEntry === null) return;
|
|
1793
|
+
await this.output(finalEntry, level);
|
|
1699
1794
|
}
|
|
1700
1795
|
/**
|
|
1701
1796
|
* Hot-path level check: a single Map lookup + integer compare.
|
|
@@ -1737,19 +1832,27 @@ var LogixiaLogger = class LogixiaLogger {
|
|
|
1737
1832
|
return this.getLevel();
|
|
1738
1833
|
}
|
|
1739
1834
|
formatLog(entry) {
|
|
1740
|
-
|
|
1741
|
-
if (
|
|
1742
|
-
|
|
1743
|
-
|
|
1744
|
-
|
|
1835
|
+
const format = this.config.format;
|
|
1836
|
+
if (format === null || format === void 0 ? void 0 : format.json) {
|
|
1837
|
+
if (this._pluginRegistry.size === 0) try {
|
|
1838
|
+
const line = this._buildJsonLine(entry);
|
|
1839
|
+
if (line !== void 0) return line;
|
|
1840
|
+
} catch {}
|
|
1841
|
+
let jsonEntry = entry;
|
|
1842
|
+
try {
|
|
1843
|
+
jsonEntry = toJsonEntry(entry);
|
|
1844
|
+
return JSON.stringify(jsonEntry);
|
|
1845
|
+
} catch {
|
|
1846
|
+
return require_safe_stringify.stringifyForLog(jsonEntry);
|
|
1847
|
+
}
|
|
1745
1848
|
}
|
|
1746
1849
|
let formatted = "";
|
|
1747
|
-
const doColorize = (
|
|
1850
|
+
const doColorize = (format === null || format === void 0 ? void 0 : format.colorize) ?? true;
|
|
1748
1851
|
const gray = doColorize ? this._colorMap.get("gray") : "";
|
|
1749
1852
|
const cyan = doColorize ? this._colorMap.get("cyan") : "";
|
|
1750
1853
|
const yellow = doColorize ? this._colorMap.get("yellow") : "";
|
|
1751
1854
|
const reset = doColorize ? this._colorMap.get("reset") : "";
|
|
1752
|
-
if ((
|
|
1855
|
+
if ((format === null || format === void 0 ? void 0 : format.timestamp) !== false && this._fieldCache.get("timestamp") !== false) formatted += `${gray}[${entry.timestamp}]${reset} `;
|
|
1753
1856
|
if (this._fieldCache.get("level") !== false) formatted += this._formattedLevels.get(entry.level) ?? `[${entry.level.toUpperCase()}] `;
|
|
1754
1857
|
formatted += this._formattedAppName;
|
|
1755
1858
|
if (entry.traceId && this._fieldCache.get("traceId") !== false) formatted += `${cyan}[${require_otel.stripControlChars(String(entry.traceId))}]${reset} `;
|
|
@@ -1758,9 +1861,46 @@ var LogixiaLogger = class LogixiaLogger {
|
|
|
1758
1861
|
if (entry.payload !== void 0 && this._fieldCache.get("payload") !== false) formatted += ` ${require_safe_stringify.stringifyForLog(entry.payload)}`;
|
|
1759
1862
|
return formatted;
|
|
1760
1863
|
}
|
|
1864
|
+
/**
|
|
1865
|
+
* The same bytes JSON.stringify(entry) gives for an entry log() built, without
|
|
1866
|
+
* walking the fixed fields. Returns undefined when a field has an unexpected type.
|
|
1867
|
+
*/
|
|
1868
|
+
_buildJsonLine(entry) {
|
|
1869
|
+
const { timestamp, level, appName, environment, message, context, traceId, payload } = entry;
|
|
1870
|
+
if (typeof timestamp !== "string" || typeof message !== "string" || typeof appName !== "string" || typeof environment !== "string") return;
|
|
1871
|
+
if (appName !== this._jsonHeadsApp || environment !== this._jsonHeadsEnv) {
|
|
1872
|
+
this._jsonHeads.clear();
|
|
1873
|
+
this._jsonHeadsApp = appName;
|
|
1874
|
+
this._jsonHeadsEnv = environment;
|
|
1875
|
+
}
|
|
1876
|
+
let head = this._jsonHeads.get(level);
|
|
1877
|
+
if (head === void 0) {
|
|
1878
|
+
if (typeof level !== "string") return void 0;
|
|
1879
|
+
head = `,"level":${JSON.stringify(level)},"appName":${JSON.stringify(appName)},"environment":${JSON.stringify(environment)},"message":`;
|
|
1880
|
+
this._jsonHeads.set(level, head);
|
|
1881
|
+
}
|
|
1882
|
+
let line = `{"timestamp":"${timestamp}"${head}${JSON.stringify(message)}`;
|
|
1883
|
+
if (context !== void 0) {
|
|
1884
|
+
if (typeof context !== "string") return void 0;
|
|
1885
|
+
if (context !== this._jsonContextKey) {
|
|
1886
|
+
this._jsonContextKey = context;
|
|
1887
|
+
this._jsonContext = `,"context":${JSON.stringify(context)}`;
|
|
1888
|
+
}
|
|
1889
|
+
line += this._jsonContext;
|
|
1890
|
+
}
|
|
1891
|
+
if (traceId !== void 0) {
|
|
1892
|
+
if (typeof traceId !== "string") return void 0;
|
|
1893
|
+
line += `,"traceId":${JSON.stringify(traceId)}`;
|
|
1894
|
+
}
|
|
1895
|
+
if (payload !== void 0) {
|
|
1896
|
+
if (payload === null || typeof payload !== "object" || Array.isArray(payload) || typeof payload.toJSON === "function") return;
|
|
1897
|
+
line += `,"payload":${JSON.stringify(payload)}`;
|
|
1898
|
+
}
|
|
1899
|
+
return `${line}}`;
|
|
1900
|
+
}
|
|
1761
1901
|
colorize(text, color) {
|
|
1762
|
-
var _this$config$
|
|
1763
|
-
if (!((_this$config$
|
|
1902
|
+
var _this$config$format2;
|
|
1903
|
+
if (!((_this$config$format2 = this.config.format) === null || _this$config$format2 === void 0 ? void 0 : _this$config$format2.colorize)) return text;
|
|
1764
1904
|
return `${this._colorMap.get(color.toLowerCase()) ?? this._colorMap.get("white")}${text}${this._colorMap.get("reset")}`;
|
|
1765
1905
|
}
|
|
1766
1906
|
/**
|
|
@@ -1812,9 +1952,7 @@ function createLogger(config, context) {
|
|
|
1812
1952
|
const logger = new LogixiaLogger(config, context);
|
|
1813
1953
|
const mutableLogger = logger;
|
|
1814
1954
|
if ((_config$levelOptions3 = config.levelOptions) === null || _config$levelOptions3 === void 0 ? void 0 : _config$levelOptions3.levels) {
|
|
1815
|
-
for (const levelName of Object.keys(config.levelOptions.levels)) if (!mutableLogger[levelName]) mutableLogger[levelName] =
|
|
1816
|
-
await logger.logLevel(levelName, message, data);
|
|
1817
|
-
};
|
|
1955
|
+
for (const levelName of Object.keys(config.levelOptions.levels)) if (!mutableLogger[levelName]) mutableLogger[levelName] = (message, data) => logger.logLevel(levelName, message, data);
|
|
1818
1956
|
}
|
|
1819
1957
|
return logger;
|
|
1820
1958
|
}
|
|
@@ -2179,6 +2317,12 @@ Object.defineProperty(exports, "serializeError", {
|
|
|
2179
2317
|
return serializeError;
|
|
2180
2318
|
}
|
|
2181
2319
|
});
|
|
2320
|
+
Object.defineProperty(exports, "serializeNestedErrors", {
|
|
2321
|
+
enumerable: true,
|
|
2322
|
+
get: function() {
|
|
2323
|
+
return serializeNestedErrors;
|
|
2324
|
+
}
|
|
2325
|
+
});
|
|
2182
2326
|
Object.defineProperty(exports, "usePlugin", {
|
|
2183
2327
|
enumerable: true,
|
|
2184
2328
|
get: function() {
|
|
@@ -2186,4 +2330,4 @@ Object.defineProperty(exports, "usePlugin", {
|
|
|
2186
2330
|
}
|
|
2187
2331
|
});
|
|
2188
2332
|
|
|
2189
|
-
//# sourceMappingURL=builder-
|
|
2333
|
+
//# sourceMappingURL=builder-Bs0qkfkY.js.map
|