@ncoderz/log-m8 1.2.4 → 1.3.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 +33 -1
- package/dist/browser/log-m8.global.js +1 -1
- package/dist/browser/log-m8.global.js.map +1 -1
- package/dist/index.cjs +164 -39
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +408 -55
- package/dist/index.d.ts +408 -55
- package/dist/index.js +158 -39
- package/dist/index.js.map +1 -1
- package/package.json +13 -1
package/dist/index.cjs
CHANGED
|
@@ -22,10 +22,16 @@ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "sy
|
|
|
22
22
|
// src/index.ts
|
|
23
23
|
var index_exports = {};
|
|
24
24
|
__export(index_exports, {
|
|
25
|
+
ConsoleAppender: () => ConsoleAppender,
|
|
26
|
+
DefaultFormatter: () => DefaultFormatter,
|
|
27
|
+
FileAppender: () => FileAppender,
|
|
28
|
+
JsonFormatter: () => JsonFormatter,
|
|
25
29
|
LogLevel: () => LogLevel,
|
|
26
30
|
LogM8: () => LogM82,
|
|
27
31
|
LogM8Utils: () => LogM8Utils,
|
|
32
|
+
MatchFilter: () => MatchFilter,
|
|
28
33
|
NullLogger: () => NullLogger,
|
|
34
|
+
PACKAGE_INFO: () => PACKAGE_INFO,
|
|
29
35
|
PluginKind: () => PluginKind
|
|
30
36
|
});
|
|
31
37
|
module.exports = __toCommonJS(index_exports);
|
|
@@ -1106,6 +1112,7 @@ var LogM8 = class {
|
|
|
1106
1112
|
__publicField(this, "_globalLogLevelNumber");
|
|
1107
1113
|
__publicField(this, "_logLevelValues");
|
|
1108
1114
|
__publicField(this, "_logLevelSet");
|
|
1115
|
+
__publicField(this, "_logLevelIndexMap");
|
|
1109
1116
|
// Buffer for log events before the system is initialized
|
|
1110
1117
|
__publicField(this, "_logBuffer");
|
|
1111
1118
|
this._initialized = false;
|
|
@@ -1115,8 +1122,11 @@ var LogM8 = class {
|
|
|
1115
1122
|
this._filters = [];
|
|
1116
1123
|
this._logLevelValues = Object.values(LogLevel);
|
|
1117
1124
|
this._logLevelSet = new Set(this._logLevelValues);
|
|
1125
|
+
this._logLevelIndexMap = new Map(
|
|
1126
|
+
this._logLevelValues.map((level, index) => [level, index])
|
|
1127
|
+
);
|
|
1118
1128
|
this._globalLogLevel = LogLevel.info;
|
|
1119
|
-
this._globalLogLevelNumber = this.
|
|
1129
|
+
this._globalLogLevelNumber = this._logLevelIndexMap.get(LogLevel.info);
|
|
1120
1130
|
this._logBuffer = [];
|
|
1121
1131
|
this._pluginManager.registerPluginFactory(new ConsoleAppenderFactory());
|
|
1122
1132
|
this._pluginManager.registerPluginFactory(new FileAppenderFactory());
|
|
@@ -1163,32 +1173,7 @@ var LogM8 = class {
|
|
|
1163
1173
|
}
|
|
1164
1174
|
const appenderConfigs = config.appenders ?? DEFAULT_APPENDERS;
|
|
1165
1175
|
for (const appenderConfigOrName of appenderConfigs) {
|
|
1166
|
-
const appender = this.
|
|
1167
|
-
PluginKind.appender,
|
|
1168
|
-
appenderConfigOrName
|
|
1169
|
-
);
|
|
1170
|
-
const appenderConfig = LogM8Utils.isString(appenderConfigOrName) ? {
|
|
1171
|
-
name: appender.name
|
|
1172
|
-
} : appenderConfigOrName;
|
|
1173
|
-
const formatter = appenderConfig?.formatter ? this._pluginManager.createPlugin(
|
|
1174
|
-
PluginKind.formatter,
|
|
1175
|
-
appenderConfig.formatter
|
|
1176
|
-
) : void 0;
|
|
1177
|
-
const filters = [];
|
|
1178
|
-
const ac = appenderConfig;
|
|
1179
|
-
for (const filterConfig of ac.filters ?? []) {
|
|
1180
|
-
const filter = this._pluginManager.createPlugin(PluginKind.filter, filterConfig);
|
|
1181
|
-
if (filter) {
|
|
1182
|
-
filters.push(filter);
|
|
1183
|
-
} else {
|
|
1184
|
-
if (console && console.log) {
|
|
1185
|
-
console.log(
|
|
1186
|
-
`LogM8: Filter '${filterConfig}' not found for appender ${appenderConfig.name}.`
|
|
1187
|
-
);
|
|
1188
|
-
}
|
|
1189
|
-
}
|
|
1190
|
-
}
|
|
1191
|
-
appender.init(appenderConfig, formatter, filters);
|
|
1176
|
+
const appender = this._createAndInitAppender(appenderConfigOrName);
|
|
1192
1177
|
this._appenders.push(appender);
|
|
1193
1178
|
}
|
|
1194
1179
|
this._sortAppenders();
|
|
@@ -1295,7 +1280,7 @@ var LogM8 = class {
|
|
|
1295
1280
|
this.getLogger(logger).setLevel(levelStr);
|
|
1296
1281
|
} else {
|
|
1297
1282
|
this._globalLogLevel = this._logLevelSet.has(levelStr) ? levelStr : this._globalLogLevel;
|
|
1298
|
-
this._globalLogLevelNumber = this.
|
|
1283
|
+
this._globalLogLevelNumber = this._logLevelIndexMap.get(this._globalLogLevel);
|
|
1299
1284
|
}
|
|
1300
1285
|
}
|
|
1301
1286
|
/**
|
|
@@ -1318,6 +1303,101 @@ var LogM8 = class {
|
|
|
1318
1303
|
if (!appender) return;
|
|
1319
1304
|
appender.enabled = false;
|
|
1320
1305
|
}
|
|
1306
|
+
/**
|
|
1307
|
+
* Adds an appender to the logging system at runtime.
|
|
1308
|
+
*
|
|
1309
|
+
* Creates and initializes the appender using the plugin factory system,
|
|
1310
|
+
* including any configured formatter and filters. The appender is inserted
|
|
1311
|
+
* into the priority-sorted appender list and immediately begins receiving
|
|
1312
|
+
* log events.
|
|
1313
|
+
*
|
|
1314
|
+
* Must be called after init(). The appender name must not already be in use.
|
|
1315
|
+
*
|
|
1316
|
+
* @param config - Appender name (string) or full configuration object
|
|
1317
|
+
*
|
|
1318
|
+
* @throws {Error} When called before init()
|
|
1319
|
+
* @throws {Error} When an appender with the same name already exists
|
|
1320
|
+
* @throws {Error} When the referenced plugin factory is not registered
|
|
1321
|
+
*
|
|
1322
|
+
* @example
|
|
1323
|
+
* ```typescript
|
|
1324
|
+
* // Add by name (uses factory defaults)
|
|
1325
|
+
* Logging.addAppender('console');
|
|
1326
|
+
*
|
|
1327
|
+
* // Add with full configuration
|
|
1328
|
+
* Logging.addAppender({
|
|
1329
|
+
* name: 'file',
|
|
1330
|
+
* filename: 'debug.log',
|
|
1331
|
+
* formatter: 'json-formatter',
|
|
1332
|
+
* filters: ['sensitive-data'],
|
|
1333
|
+
* priority: 10
|
|
1334
|
+
* });
|
|
1335
|
+
* ```
|
|
1336
|
+
*/
|
|
1337
|
+
addAppender(config) {
|
|
1338
|
+
if (!this._initialized) {
|
|
1339
|
+
throw new Error("LogM8: Cannot add appender before init()");
|
|
1340
|
+
}
|
|
1341
|
+
const name = typeof config === "string" ? config : config.name;
|
|
1342
|
+
if (this._getAppender(name)) {
|
|
1343
|
+
throw new Error(`LogM8: Appender '${name}' already exists`);
|
|
1344
|
+
}
|
|
1345
|
+
const appender = this._createAndInitAppender(config);
|
|
1346
|
+
this._appenders.push(appender);
|
|
1347
|
+
this._sortAppenders();
|
|
1348
|
+
}
|
|
1349
|
+
/**
|
|
1350
|
+
* Removes an appender from the logging system at runtime.
|
|
1351
|
+
*
|
|
1352
|
+
* Flushes any buffered output, disposes the appender, and removes it
|
|
1353
|
+
* from the active appender list. The appender will no longer receive
|
|
1354
|
+
* log events after removal.
|
|
1355
|
+
*
|
|
1356
|
+
* @param name - Name of the appender to remove
|
|
1357
|
+
* @returns True if the appender was found and removed, false otherwise
|
|
1358
|
+
*
|
|
1359
|
+
* @example
|
|
1360
|
+
* ```typescript
|
|
1361
|
+
* // Remove a dynamically added appender
|
|
1362
|
+
* Logging.removeAppender('file');
|
|
1363
|
+
*
|
|
1364
|
+
* // Check if removal succeeded
|
|
1365
|
+
* if (!Logging.removeAppender('unknown')) {
|
|
1366
|
+
* console.warn('Appender not found');
|
|
1367
|
+
* }
|
|
1368
|
+
* ```
|
|
1369
|
+
*/
|
|
1370
|
+
removeAppender(name) {
|
|
1371
|
+
const appender = this._getAppender(name);
|
|
1372
|
+
if (!appender) return false;
|
|
1373
|
+
try {
|
|
1374
|
+
appender.flush();
|
|
1375
|
+
} catch (err) {
|
|
1376
|
+
if (console && console.error) {
|
|
1377
|
+
console.error(`LogM8: Failed to flush appender during removal: ${appender.name}:`, err);
|
|
1378
|
+
}
|
|
1379
|
+
}
|
|
1380
|
+
appender.dispose();
|
|
1381
|
+
this._appenders = this._appenders.filter((a) => a !== appender);
|
|
1382
|
+
return true;
|
|
1383
|
+
}
|
|
1384
|
+
/**
|
|
1385
|
+
* Returns the names of all currently registered appenders.
|
|
1386
|
+
*
|
|
1387
|
+
* The returned array is a snapshot; modifications to it do not affect
|
|
1388
|
+
* the logging system. Names are in priority-sorted order (highest first).
|
|
1389
|
+
*
|
|
1390
|
+
* @returns Array of appender names
|
|
1391
|
+
*
|
|
1392
|
+
* @example
|
|
1393
|
+
* ```typescript
|
|
1394
|
+
* const names = Logging.getAppenderNames();
|
|
1395
|
+
* console.log('Active appenders:', names); // ['console', 'file']
|
|
1396
|
+
* ```
|
|
1397
|
+
*/
|
|
1398
|
+
getAppenderNames() {
|
|
1399
|
+
return this._appenders.map((a) => a.name);
|
|
1400
|
+
}
|
|
1321
1401
|
/**
|
|
1322
1402
|
* Forces an appender to flush any buffered output.
|
|
1323
1403
|
*
|
|
@@ -1426,9 +1506,10 @@ var LogM8 = class {
|
|
|
1426
1506
|
registerPluginFactory(pluginFactory) {
|
|
1427
1507
|
this._pluginManager.registerPluginFactory(pluginFactory);
|
|
1428
1508
|
}
|
|
1429
|
-
_log(logger, level, message
|
|
1430
|
-
const levelNumber = this.
|
|
1509
|
+
_log(logger, level, message) {
|
|
1510
|
+
const levelNumber = this._logLevelIndexMap.get(level);
|
|
1431
1511
|
if (levelNumber > logger._levelNumber || levelNumber > this._globalLogLevelNumber) return;
|
|
1512
|
+
const data = arguments.length > 3 ? Array.prototype.slice.call(arguments, 3) : [];
|
|
1432
1513
|
const logEvent = {
|
|
1433
1514
|
logger: logger.name,
|
|
1434
1515
|
level,
|
|
@@ -1455,16 +1536,16 @@ var LogM8 = class {
|
|
|
1455
1536
|
_setLevel(logger, level) {
|
|
1456
1537
|
const levelStr = (level ?? "").trim().toLowerCase();
|
|
1457
1538
|
logger.level = this._logLevelSet.has(levelStr) ? levelStr : logger.level;
|
|
1458
|
-
logger._levelNumber = this.
|
|
1539
|
+
logger._levelNumber = this._logLevelIndexMap.get(logger.level);
|
|
1459
1540
|
logger.isEnabled = logger.level !== LogLevel.off;
|
|
1460
1541
|
const levelNumber = logger._levelNumber;
|
|
1461
|
-
logger.isFatal = this.
|
|
1462
|
-
logger.isError = this.
|
|
1463
|
-
logger.isWarn = this.
|
|
1464
|
-
logger.isInfo = this.
|
|
1465
|
-
logger.isDebug = this.
|
|
1466
|
-
logger.isTrack = this.
|
|
1467
|
-
logger.isTrace = this.
|
|
1542
|
+
logger.isFatal = this._logLevelIndexMap.get(LogLevel.fatal) <= levelNumber;
|
|
1543
|
+
logger.isError = this._logLevelIndexMap.get(LogLevel.error) <= levelNumber;
|
|
1544
|
+
logger.isWarn = this._logLevelIndexMap.get(LogLevel.warn) <= levelNumber;
|
|
1545
|
+
logger.isInfo = this._logLevelIndexMap.get(LogLevel.info) <= levelNumber;
|
|
1546
|
+
logger.isDebug = this._logLevelIndexMap.get(LogLevel.debug) <= levelNumber;
|
|
1547
|
+
logger.isTrack = this._logLevelIndexMap.get(LogLevel.track) <= levelNumber;
|
|
1548
|
+
logger.isTrace = this._logLevelIndexMap.get(LogLevel.trace) <= levelNumber;
|
|
1468
1549
|
}
|
|
1469
1550
|
_setContext(logger, context) {
|
|
1470
1551
|
logger.context = context ?? {};
|
|
@@ -1487,11 +1568,40 @@ var LogM8 = class {
|
|
|
1487
1568
|
}
|
|
1488
1569
|
}
|
|
1489
1570
|
}
|
|
1571
|
+
_createAndInitAppender(appenderConfigOrName) {
|
|
1572
|
+
const appender = this._pluginManager.createPlugin(
|
|
1573
|
+
PluginKind.appender,
|
|
1574
|
+
appenderConfigOrName
|
|
1575
|
+
);
|
|
1576
|
+
const appenderConfig = LogM8Utils.isString(appenderConfigOrName) ? {
|
|
1577
|
+
name: appender.name
|
|
1578
|
+
} : appenderConfigOrName;
|
|
1579
|
+
const formatter = appenderConfig?.formatter ? this._pluginManager.createPlugin(
|
|
1580
|
+
PluginKind.formatter,
|
|
1581
|
+
appenderConfig.formatter
|
|
1582
|
+
) : void 0;
|
|
1583
|
+
const filters = [];
|
|
1584
|
+
const ac = appenderConfig;
|
|
1585
|
+
for (const filterConfig of ac.filters ?? []) {
|
|
1586
|
+
const filter = this._pluginManager.createPlugin(PluginKind.filter, filterConfig);
|
|
1587
|
+
if (filter) {
|
|
1588
|
+
filters.push(filter);
|
|
1589
|
+
} else {
|
|
1590
|
+
if (console && console.log) {
|
|
1591
|
+
console.log(
|
|
1592
|
+
`LogM8: Filter '${filterConfig}' not found for appender ${appenderConfig.name}.`
|
|
1593
|
+
);
|
|
1594
|
+
}
|
|
1595
|
+
}
|
|
1596
|
+
}
|
|
1597
|
+
appender.init(appenderConfig, formatter, filters);
|
|
1598
|
+
return appender;
|
|
1599
|
+
}
|
|
1490
1600
|
_getAppender(name) {
|
|
1491
1601
|
return this._appenders.find((a) => a.name === name);
|
|
1492
1602
|
}
|
|
1493
1603
|
_sortAppenders() {
|
|
1494
|
-
this._appenders.sort((a, b) => {
|
|
1604
|
+
this._appenders = [...this._appenders].sort((a, b) => {
|
|
1495
1605
|
const aPriority = a?.priority ?? 0;
|
|
1496
1606
|
const bPriority = b?.priority ?? 0;
|
|
1497
1607
|
return bPriority - aPriority;
|
|
@@ -1509,6 +1619,15 @@ var LogM8 = class {
|
|
|
1509
1619
|
}
|
|
1510
1620
|
};
|
|
1511
1621
|
|
|
1622
|
+
// src/_generated/package_info.ts
|
|
1623
|
+
var PACKAGE_INFO = {
|
|
1624
|
+
"name": "@ncoderz/log-m8",
|
|
1625
|
+
"version": "1.3.0",
|
|
1626
|
+
"author": "RA Sewell <richard.sewell@ncoderz.com>",
|
|
1627
|
+
"license": "BSD-2-Clause",
|
|
1628
|
+
"description": "Logging system for TypeScript / JavaScript"
|
|
1629
|
+
};
|
|
1630
|
+
|
|
1512
1631
|
// src/NullLogger.ts
|
|
1513
1632
|
var NullLogger = class {
|
|
1514
1633
|
constructor() {
|
|
@@ -1552,10 +1671,16 @@ var NullLogger = class {
|
|
|
1552
1671
|
var LogM82 = new LogM8();
|
|
1553
1672
|
// Annotate the CommonJS export names for ESM import in node:
|
|
1554
1673
|
0 && (module.exports = {
|
|
1674
|
+
ConsoleAppender,
|
|
1675
|
+
DefaultFormatter,
|
|
1676
|
+
FileAppender,
|
|
1677
|
+
JsonFormatter,
|
|
1555
1678
|
LogLevel,
|
|
1556
1679
|
LogM8,
|
|
1557
1680
|
LogM8Utils,
|
|
1681
|
+
MatchFilter,
|
|
1558
1682
|
NullLogger,
|
|
1683
|
+
PACKAGE_INFO,
|
|
1559
1684
|
PluginKind
|
|
1560
1685
|
});
|
|
1561
1686
|
//# sourceMappingURL=index.cjs.map
|