@ncoderz/log-m8 1.0.2 → 1.2.0
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 +48 -9
- package/dist/browser/log-m8.global.js +1 -1
- package/dist/browser/log-m8.global.js.map +1 -1
- package/dist/index.cjs +97 -23
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +23 -7
- package/dist/index.d.ts +23 -7
- package/dist/index.js +96 -22
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.cjs
CHANGED
|
@@ -23,8 +23,8 @@ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "sy
|
|
|
23
23
|
var index_exports = {};
|
|
24
24
|
__export(index_exports, {
|
|
25
25
|
LogLevel: () => LogLevel,
|
|
26
|
+
LogM8: () => LogM82,
|
|
26
27
|
LogM8Utils: () => LogM8Utils,
|
|
27
|
-
Logging: () => Logging,
|
|
28
28
|
PluginKind: () => PluginKind
|
|
29
29
|
});
|
|
30
30
|
module.exports = __toCommonJS(index_exports);
|
|
@@ -144,6 +144,7 @@ var import_fs = require("fs");
|
|
|
144
144
|
|
|
145
145
|
// src/LogM8Utils.ts
|
|
146
146
|
var TIMESTAMP_TOKEN_REGEX = /(yyyy|SSS|hh|mm|ss|SS|zz|z|yy|MM|dd|A|a|h|S)/g;
|
|
147
|
+
var REGEX_MATCHER = /^\/(.+)\/([dgimsuvy]*)$/;
|
|
147
148
|
var EXCLUDED_ERROR_KEYS = /* @__PURE__ */ new Set(["name", "message", "stack", "cause"]);
|
|
148
149
|
var COMMON_NON_ENUMERABLE_PROPS = ["code", "errno", "syscall", "path"];
|
|
149
150
|
var LogM8Utils = class _LogM8Utils {
|
|
@@ -539,6 +540,31 @@ var LogM8Utils = class _LogM8Utils {
|
|
|
539
540
|
};
|
|
540
541
|
return serializeErrorInternal(error, /* @__PURE__ */ new WeakSet());
|
|
541
542
|
}
|
|
543
|
+
/**
|
|
544
|
+
* Take a regex in the format /regex/flags and parse it into a RegExp object
|
|
545
|
+
*
|
|
546
|
+
* @param regex regex in the format /regex/flags
|
|
547
|
+
* @param extraFlags additional flags to apply to the regex
|
|
548
|
+
* @returns RegExp object or undefined if the regex is invalid
|
|
549
|
+
*/
|
|
550
|
+
static parseRegexFromString(regex, extraFlags) {
|
|
551
|
+
try {
|
|
552
|
+
const match = regex.match(REGEX_MATCHER);
|
|
553
|
+
if (match == null) return void 0;
|
|
554
|
+
const [, pattern, flags] = match;
|
|
555
|
+
let finalFlags = flags;
|
|
556
|
+
if (Array.isArray(extraFlags)) {
|
|
557
|
+
for (const flag of extraFlags) {
|
|
558
|
+
if (!flags.includes(flag)) {
|
|
559
|
+
finalFlags += flag;
|
|
560
|
+
}
|
|
561
|
+
}
|
|
562
|
+
}
|
|
563
|
+
return new RegExp(pattern, finalFlags);
|
|
564
|
+
} catch (_e) {
|
|
565
|
+
return void 0;
|
|
566
|
+
}
|
|
567
|
+
}
|
|
542
568
|
};
|
|
543
569
|
|
|
544
570
|
// src/appenders/FileAppender.ts
|
|
@@ -639,8 +665,8 @@ var MatchFilter = class {
|
|
|
639
665
|
*/
|
|
640
666
|
init(config) {
|
|
641
667
|
const cfg = config ?? {};
|
|
642
|
-
this._allow = cfg.allow
|
|
643
|
-
this._deny = cfg.deny
|
|
668
|
+
this._allow = this._prepareRules(cfg.allow);
|
|
669
|
+
this._deny = this._prepareRules(cfg.deny);
|
|
644
670
|
this.enabled = cfg.enabled !== false;
|
|
645
671
|
}
|
|
646
672
|
dispose() {
|
|
@@ -658,13 +684,13 @@ var MatchFilter = class {
|
|
|
658
684
|
if (this._allow && Object.keys(this._allow).length > 0) {
|
|
659
685
|
for (const [path, expected] of Object.entries(this._allow)) {
|
|
660
686
|
const actual = LogM8Utils.getPropertyByPath(logEvent, path);
|
|
661
|
-
if (!this.
|
|
687
|
+
if (!this._matches(actual, expected)) return false;
|
|
662
688
|
}
|
|
663
689
|
}
|
|
664
690
|
if (this._deny && Object.keys(this._deny).length > 0) {
|
|
665
691
|
for (const [path, expected] of Object.entries(this._deny)) {
|
|
666
692
|
const actual = LogM8Utils.getPropertyByPath(logEvent, path);
|
|
667
|
-
if (this.
|
|
693
|
+
if (this._matches(actual, expected)) return false;
|
|
668
694
|
}
|
|
669
695
|
}
|
|
670
696
|
return true;
|
|
@@ -672,6 +698,15 @@ var MatchFilter = class {
|
|
|
672
698
|
return false;
|
|
673
699
|
}
|
|
674
700
|
}
|
|
701
|
+
// Matches actual against expected, supporting RegExp; otherwise deep equality.
|
|
702
|
+
_matches(actual, expected) {
|
|
703
|
+
if (expected instanceof RegExp) {
|
|
704
|
+
if (actual === void 0 || actual === null) return false;
|
|
705
|
+
const asString = typeof actual === "string" ? actual : String(actual);
|
|
706
|
+
return expected.test(asString);
|
|
707
|
+
}
|
|
708
|
+
return this._isEqual(actual, expected);
|
|
709
|
+
}
|
|
675
710
|
// Simple deep equality for primitives, arrays, plain objects, dates
|
|
676
711
|
_isEqual(a, b) {
|
|
677
712
|
if (a === b) return true;
|
|
@@ -702,6 +737,20 @@ var MatchFilter = class {
|
|
|
702
737
|
_isPlainObject(val) {
|
|
703
738
|
return typeof val === "object" && val !== null && !Array.isArray(val) && Object.getPrototypeOf(val) === Object.prototype;
|
|
704
739
|
}
|
|
740
|
+
// Convert rule map values: regex-like strings -> RegExp; leave others as-is.
|
|
741
|
+
_prepareRules(map) {
|
|
742
|
+
if (!map || Object.keys(map).length === 0) return void 0;
|
|
743
|
+
const prepared = {};
|
|
744
|
+
for (const [path, val] of Object.entries(map)) {
|
|
745
|
+
if (typeof val === "string") {
|
|
746
|
+
const rx = LogM8Utils.parseRegexFromString(val);
|
|
747
|
+
prepared[path] = rx ?? val;
|
|
748
|
+
} else {
|
|
749
|
+
prepared[path] = val;
|
|
750
|
+
}
|
|
751
|
+
}
|
|
752
|
+
return prepared;
|
|
753
|
+
}
|
|
705
754
|
};
|
|
706
755
|
var MatchFilterFactory = class {
|
|
707
756
|
constructor() {
|
|
@@ -1027,16 +1076,27 @@ var DEFAULT_APPENDERS = [
|
|
|
1027
1076
|
];
|
|
1028
1077
|
var LogM8 = class {
|
|
1029
1078
|
constructor() {
|
|
1030
|
-
__publicField(this, "_initialized"
|
|
1031
|
-
__publicField(this, "_pluginManager"
|
|
1032
|
-
__publicField(this, "_loggers"
|
|
1033
|
-
__publicField(this, "_appenders"
|
|
1079
|
+
__publicField(this, "_initialized");
|
|
1080
|
+
__publicField(this, "_pluginManager");
|
|
1081
|
+
__publicField(this, "_loggers");
|
|
1082
|
+
__publicField(this, "_appenders");
|
|
1034
1083
|
__publicField(this, "_filters", []);
|
|
1035
|
-
__publicField(this, "
|
|
1036
|
-
__publicField(this, "
|
|
1037
|
-
__publicField(this, "
|
|
1084
|
+
__publicField(this, "_globalLogLevel");
|
|
1085
|
+
__publicField(this, "_globalLogLevelNumber");
|
|
1086
|
+
__publicField(this, "_logLevelValues");
|
|
1087
|
+
__publicField(this, "_logLevelSet");
|
|
1038
1088
|
// Buffer for log events before the system is initialized
|
|
1039
|
-
__publicField(this, "_logBuffer"
|
|
1089
|
+
__publicField(this, "_logBuffer");
|
|
1090
|
+
this._initialized = false;
|
|
1091
|
+
this._pluginManager = new PluginManager();
|
|
1092
|
+
this._loggers = /* @__PURE__ */ new Map();
|
|
1093
|
+
this._appenders = [];
|
|
1094
|
+
this._filters = [];
|
|
1095
|
+
this._logLevelValues = Object.values(LogLevel);
|
|
1096
|
+
this._logLevelSet = new Set(this._logLevelValues);
|
|
1097
|
+
this._globalLogLevel = LogLevel.info;
|
|
1098
|
+
this._globalLogLevelNumber = this._logLevelValues.indexOf(LogLevel.info);
|
|
1099
|
+
this._logBuffer = [];
|
|
1040
1100
|
this._pluginManager.registerPluginFactory(new ConsoleAppenderFactory());
|
|
1041
1101
|
this._pluginManager.registerPluginFactory(new FileAppenderFactory());
|
|
1042
1102
|
this._pluginManager.registerPluginFactory(new DefaultFormatterFactory());
|
|
@@ -1073,10 +1133,10 @@ var LogM8 = class {
|
|
|
1073
1133
|
init(config) {
|
|
1074
1134
|
config = Object.assign({}, config);
|
|
1075
1135
|
this._reset();
|
|
1076
|
-
this.
|
|
1136
|
+
this._globalLogLevel = this._logLevelSet.has(config.level) ? config.level : LogLevel.info;
|
|
1077
1137
|
for (const [name, level] of Object.entries(config.loggers ?? {})) {
|
|
1078
1138
|
const logger = this.getLogger(name);
|
|
1079
|
-
const l = this._logLevelSet.has(level) ? level : this.
|
|
1139
|
+
const l = this._logLevelSet.has(level) ? level : this._globalLogLevel;
|
|
1080
1140
|
logger.setLevel(l);
|
|
1081
1141
|
}
|
|
1082
1142
|
const appenderConfigs = config.appenders ?? DEFAULT_APPENDERS;
|
|
@@ -1173,7 +1233,7 @@ var LogM8 = class {
|
|
|
1173
1233
|
if (existingLogger) return existingLogger;
|
|
1174
1234
|
const logger = {
|
|
1175
1235
|
name: nameStr,
|
|
1176
|
-
level: this.
|
|
1236
|
+
level: this._globalLogLevel,
|
|
1177
1237
|
context: {}
|
|
1178
1238
|
};
|
|
1179
1239
|
logger.fatal = this._log.bind(this, logger, LogLevel.fatal);
|
|
@@ -1186,10 +1246,24 @@ var LogM8 = class {
|
|
|
1186
1246
|
logger.setLevel = this._setLevel.bind(this, logger);
|
|
1187
1247
|
logger.setContext = this._setContext.bind(this, logger);
|
|
1188
1248
|
logger.getLogger = (name2) => this.getLogger([logger.name, name2]);
|
|
1189
|
-
this._setLevel(logger, this.
|
|
1249
|
+
this._setLevel(logger, this._globalLogLevel);
|
|
1190
1250
|
this._loggers.set(logger.name, logger);
|
|
1191
1251
|
return logger;
|
|
1192
1252
|
}
|
|
1253
|
+
/**
|
|
1254
|
+
* Sets the global logging level or a specific logger's level.
|
|
1255
|
+
*
|
|
1256
|
+
* @param level - New logging level name (e.g., 'info', 'debug', 'off')
|
|
1257
|
+
* @param logger - Optional logger name to set level for a specific logger
|
|
1258
|
+
*/
|
|
1259
|
+
setLevel(level, logger) {
|
|
1260
|
+
if (logger) {
|
|
1261
|
+
this.getLogger(logger).setLevel(level);
|
|
1262
|
+
} else {
|
|
1263
|
+
this._globalLogLevel = this._logLevelSet.has(level) ? level : this._globalLogLevel;
|
|
1264
|
+
this._globalLogLevelNumber = this._logLevelValues.indexOf(this._globalLogLevel);
|
|
1265
|
+
}
|
|
1266
|
+
}
|
|
1193
1267
|
/**
|
|
1194
1268
|
* Enables an appender to resume processing log events.
|
|
1195
1269
|
*
|
|
@@ -1320,7 +1394,7 @@ var LogM8 = class {
|
|
|
1320
1394
|
}
|
|
1321
1395
|
_log(logger, level, message, ...data) {
|
|
1322
1396
|
const levelNumber = this._logLevelValues.indexOf(level);
|
|
1323
|
-
if (levelNumber > logger._levelNumber) return;
|
|
1397
|
+
if (levelNumber > logger._levelNumber || levelNumber > this._globalLogLevelNumber) return;
|
|
1324
1398
|
const logEvent = {
|
|
1325
1399
|
logger: logger.name,
|
|
1326
1400
|
level,
|
|
@@ -1345,9 +1419,9 @@ var LogM8 = class {
|
|
|
1345
1419
|
}
|
|
1346
1420
|
}
|
|
1347
1421
|
_setLevel(logger, level) {
|
|
1348
|
-
logger.level = level;
|
|
1422
|
+
logger.level = this._logLevelSet.has(level) ? level : logger.level;
|
|
1349
1423
|
logger._levelNumber = this._logLevelValues.indexOf(level);
|
|
1350
|
-
logger.isEnabled = level !== LogLevel.off;
|
|
1424
|
+
logger.isEnabled = logger.level !== LogLevel.off;
|
|
1351
1425
|
const levelNumber = logger._levelNumber;
|
|
1352
1426
|
logger.isFatal = this._logLevelValues.indexOf(LogLevel.fatal) <= levelNumber;
|
|
1353
1427
|
logger.isError = this._logLevelValues.indexOf(LogLevel.error) <= levelNumber;
|
|
@@ -1395,18 +1469,18 @@ var LogM8 = class {
|
|
|
1395
1469
|
this.flushAppenders();
|
|
1396
1470
|
this._appenders = [];
|
|
1397
1471
|
this._loggers.clear();
|
|
1398
|
-
this.
|
|
1472
|
+
this._globalLogLevel = LogLevel.info;
|
|
1399
1473
|
this._pluginManager.disposePlugins();
|
|
1400
1474
|
}
|
|
1401
1475
|
};
|
|
1402
1476
|
|
|
1403
1477
|
// src/index.ts
|
|
1404
|
-
var
|
|
1478
|
+
var LogM82 = new LogM8();
|
|
1405
1479
|
// Annotate the CommonJS export names for ESM import in node:
|
|
1406
1480
|
0 && (module.exports = {
|
|
1407
1481
|
LogLevel,
|
|
1482
|
+
LogM8,
|
|
1408
1483
|
LogM8Utils,
|
|
1409
|
-
Logging,
|
|
1410
1484
|
PluginKind
|
|
1411
1485
|
});
|
|
1412
1486
|
//# sourceMappingURL=index.cjs.map
|