@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.js
CHANGED
|
@@ -1078,6 +1078,7 @@ var LogM8 = class {
|
|
|
1078
1078
|
__publicField(this, "_globalLogLevelNumber");
|
|
1079
1079
|
__publicField(this, "_logLevelValues");
|
|
1080
1080
|
__publicField(this, "_logLevelSet");
|
|
1081
|
+
__publicField(this, "_logLevelIndexMap");
|
|
1081
1082
|
// Buffer for log events before the system is initialized
|
|
1082
1083
|
__publicField(this, "_logBuffer");
|
|
1083
1084
|
this._initialized = false;
|
|
@@ -1087,8 +1088,11 @@ var LogM8 = class {
|
|
|
1087
1088
|
this._filters = [];
|
|
1088
1089
|
this._logLevelValues = Object.values(LogLevel);
|
|
1089
1090
|
this._logLevelSet = new Set(this._logLevelValues);
|
|
1091
|
+
this._logLevelIndexMap = new Map(
|
|
1092
|
+
this._logLevelValues.map((level, index) => [level, index])
|
|
1093
|
+
);
|
|
1090
1094
|
this._globalLogLevel = LogLevel.info;
|
|
1091
|
-
this._globalLogLevelNumber = this.
|
|
1095
|
+
this._globalLogLevelNumber = this._logLevelIndexMap.get(LogLevel.info);
|
|
1092
1096
|
this._logBuffer = [];
|
|
1093
1097
|
this._pluginManager.registerPluginFactory(new ConsoleAppenderFactory());
|
|
1094
1098
|
this._pluginManager.registerPluginFactory(new FileAppenderFactory());
|
|
@@ -1135,32 +1139,7 @@ var LogM8 = class {
|
|
|
1135
1139
|
}
|
|
1136
1140
|
const appenderConfigs = config.appenders ?? DEFAULT_APPENDERS;
|
|
1137
1141
|
for (const appenderConfigOrName of appenderConfigs) {
|
|
1138
|
-
const appender = this.
|
|
1139
|
-
PluginKind.appender,
|
|
1140
|
-
appenderConfigOrName
|
|
1141
|
-
);
|
|
1142
|
-
const appenderConfig = LogM8Utils.isString(appenderConfigOrName) ? {
|
|
1143
|
-
name: appender.name
|
|
1144
|
-
} : appenderConfigOrName;
|
|
1145
|
-
const formatter = appenderConfig?.formatter ? this._pluginManager.createPlugin(
|
|
1146
|
-
PluginKind.formatter,
|
|
1147
|
-
appenderConfig.formatter
|
|
1148
|
-
) : void 0;
|
|
1149
|
-
const filters = [];
|
|
1150
|
-
const ac = appenderConfig;
|
|
1151
|
-
for (const filterConfig of ac.filters ?? []) {
|
|
1152
|
-
const filter = this._pluginManager.createPlugin(PluginKind.filter, filterConfig);
|
|
1153
|
-
if (filter) {
|
|
1154
|
-
filters.push(filter);
|
|
1155
|
-
} else {
|
|
1156
|
-
if (console && console.log) {
|
|
1157
|
-
console.log(
|
|
1158
|
-
`LogM8: Filter '${filterConfig}' not found for appender ${appenderConfig.name}.`
|
|
1159
|
-
);
|
|
1160
|
-
}
|
|
1161
|
-
}
|
|
1162
|
-
}
|
|
1163
|
-
appender.init(appenderConfig, formatter, filters);
|
|
1142
|
+
const appender = this._createAndInitAppender(appenderConfigOrName);
|
|
1164
1143
|
this._appenders.push(appender);
|
|
1165
1144
|
}
|
|
1166
1145
|
this._sortAppenders();
|
|
@@ -1267,7 +1246,7 @@ var LogM8 = class {
|
|
|
1267
1246
|
this.getLogger(logger).setLevel(levelStr);
|
|
1268
1247
|
} else {
|
|
1269
1248
|
this._globalLogLevel = this._logLevelSet.has(levelStr) ? levelStr : this._globalLogLevel;
|
|
1270
|
-
this._globalLogLevelNumber = this.
|
|
1249
|
+
this._globalLogLevelNumber = this._logLevelIndexMap.get(this._globalLogLevel);
|
|
1271
1250
|
}
|
|
1272
1251
|
}
|
|
1273
1252
|
/**
|
|
@@ -1290,6 +1269,101 @@ var LogM8 = class {
|
|
|
1290
1269
|
if (!appender) return;
|
|
1291
1270
|
appender.enabled = false;
|
|
1292
1271
|
}
|
|
1272
|
+
/**
|
|
1273
|
+
* Adds an appender to the logging system at runtime.
|
|
1274
|
+
*
|
|
1275
|
+
* Creates and initializes the appender using the plugin factory system,
|
|
1276
|
+
* including any configured formatter and filters. The appender is inserted
|
|
1277
|
+
* into the priority-sorted appender list and immediately begins receiving
|
|
1278
|
+
* log events.
|
|
1279
|
+
*
|
|
1280
|
+
* Must be called after init(). The appender name must not already be in use.
|
|
1281
|
+
*
|
|
1282
|
+
* @param config - Appender name (string) or full configuration object
|
|
1283
|
+
*
|
|
1284
|
+
* @throws {Error} When called before init()
|
|
1285
|
+
* @throws {Error} When an appender with the same name already exists
|
|
1286
|
+
* @throws {Error} When the referenced plugin factory is not registered
|
|
1287
|
+
*
|
|
1288
|
+
* @example
|
|
1289
|
+
* ```typescript
|
|
1290
|
+
* // Add by name (uses factory defaults)
|
|
1291
|
+
* Logging.addAppender('console');
|
|
1292
|
+
*
|
|
1293
|
+
* // Add with full configuration
|
|
1294
|
+
* Logging.addAppender({
|
|
1295
|
+
* name: 'file',
|
|
1296
|
+
* filename: 'debug.log',
|
|
1297
|
+
* formatter: 'json-formatter',
|
|
1298
|
+
* filters: ['sensitive-data'],
|
|
1299
|
+
* priority: 10
|
|
1300
|
+
* });
|
|
1301
|
+
* ```
|
|
1302
|
+
*/
|
|
1303
|
+
addAppender(config) {
|
|
1304
|
+
if (!this._initialized) {
|
|
1305
|
+
throw new Error("LogM8: Cannot add appender before init()");
|
|
1306
|
+
}
|
|
1307
|
+
const name = typeof config === "string" ? config : config.name;
|
|
1308
|
+
if (this._getAppender(name)) {
|
|
1309
|
+
throw new Error(`LogM8: Appender '${name}' already exists`);
|
|
1310
|
+
}
|
|
1311
|
+
const appender = this._createAndInitAppender(config);
|
|
1312
|
+
this._appenders.push(appender);
|
|
1313
|
+
this._sortAppenders();
|
|
1314
|
+
}
|
|
1315
|
+
/**
|
|
1316
|
+
* Removes an appender from the logging system at runtime.
|
|
1317
|
+
*
|
|
1318
|
+
* Flushes any buffered output, disposes the appender, and removes it
|
|
1319
|
+
* from the active appender list. The appender will no longer receive
|
|
1320
|
+
* log events after removal.
|
|
1321
|
+
*
|
|
1322
|
+
* @param name - Name of the appender to remove
|
|
1323
|
+
* @returns True if the appender was found and removed, false otherwise
|
|
1324
|
+
*
|
|
1325
|
+
* @example
|
|
1326
|
+
* ```typescript
|
|
1327
|
+
* // Remove a dynamically added appender
|
|
1328
|
+
* Logging.removeAppender('file');
|
|
1329
|
+
*
|
|
1330
|
+
* // Check if removal succeeded
|
|
1331
|
+
* if (!Logging.removeAppender('unknown')) {
|
|
1332
|
+
* console.warn('Appender not found');
|
|
1333
|
+
* }
|
|
1334
|
+
* ```
|
|
1335
|
+
*/
|
|
1336
|
+
removeAppender(name) {
|
|
1337
|
+
const appender = this._getAppender(name);
|
|
1338
|
+
if (!appender) return false;
|
|
1339
|
+
try {
|
|
1340
|
+
appender.flush();
|
|
1341
|
+
} catch (err) {
|
|
1342
|
+
if (console && console.error) {
|
|
1343
|
+
console.error(`LogM8: Failed to flush appender during removal: ${appender.name}:`, err);
|
|
1344
|
+
}
|
|
1345
|
+
}
|
|
1346
|
+
appender.dispose();
|
|
1347
|
+
this._appenders = this._appenders.filter((a) => a !== appender);
|
|
1348
|
+
return true;
|
|
1349
|
+
}
|
|
1350
|
+
/**
|
|
1351
|
+
* Returns the names of all currently registered appenders.
|
|
1352
|
+
*
|
|
1353
|
+
* The returned array is a snapshot; modifications to it do not affect
|
|
1354
|
+
* the logging system. Names are in priority-sorted order (highest first).
|
|
1355
|
+
*
|
|
1356
|
+
* @returns Array of appender names
|
|
1357
|
+
*
|
|
1358
|
+
* @example
|
|
1359
|
+
* ```typescript
|
|
1360
|
+
* const names = Logging.getAppenderNames();
|
|
1361
|
+
* console.log('Active appenders:', names); // ['console', 'file']
|
|
1362
|
+
* ```
|
|
1363
|
+
*/
|
|
1364
|
+
getAppenderNames() {
|
|
1365
|
+
return this._appenders.map((a) => a.name);
|
|
1366
|
+
}
|
|
1293
1367
|
/**
|
|
1294
1368
|
* Forces an appender to flush any buffered output.
|
|
1295
1369
|
*
|
|
@@ -1398,9 +1472,10 @@ var LogM8 = class {
|
|
|
1398
1472
|
registerPluginFactory(pluginFactory) {
|
|
1399
1473
|
this._pluginManager.registerPluginFactory(pluginFactory);
|
|
1400
1474
|
}
|
|
1401
|
-
_log(logger, level, message
|
|
1402
|
-
const levelNumber = this.
|
|
1475
|
+
_log(logger, level, message) {
|
|
1476
|
+
const levelNumber = this._logLevelIndexMap.get(level);
|
|
1403
1477
|
if (levelNumber > logger._levelNumber || levelNumber > this._globalLogLevelNumber) return;
|
|
1478
|
+
const data = arguments.length > 3 ? Array.prototype.slice.call(arguments, 3) : [];
|
|
1404
1479
|
const logEvent = {
|
|
1405
1480
|
logger: logger.name,
|
|
1406
1481
|
level,
|
|
@@ -1427,16 +1502,16 @@ var LogM8 = class {
|
|
|
1427
1502
|
_setLevel(logger, level) {
|
|
1428
1503
|
const levelStr = (level ?? "").trim().toLowerCase();
|
|
1429
1504
|
logger.level = this._logLevelSet.has(levelStr) ? levelStr : logger.level;
|
|
1430
|
-
logger._levelNumber = this.
|
|
1505
|
+
logger._levelNumber = this._logLevelIndexMap.get(logger.level);
|
|
1431
1506
|
logger.isEnabled = logger.level !== LogLevel.off;
|
|
1432
1507
|
const levelNumber = logger._levelNumber;
|
|
1433
|
-
logger.isFatal = this.
|
|
1434
|
-
logger.isError = this.
|
|
1435
|
-
logger.isWarn = this.
|
|
1436
|
-
logger.isInfo = this.
|
|
1437
|
-
logger.isDebug = this.
|
|
1438
|
-
logger.isTrack = this.
|
|
1439
|
-
logger.isTrace = this.
|
|
1508
|
+
logger.isFatal = this._logLevelIndexMap.get(LogLevel.fatal) <= levelNumber;
|
|
1509
|
+
logger.isError = this._logLevelIndexMap.get(LogLevel.error) <= levelNumber;
|
|
1510
|
+
logger.isWarn = this._logLevelIndexMap.get(LogLevel.warn) <= levelNumber;
|
|
1511
|
+
logger.isInfo = this._logLevelIndexMap.get(LogLevel.info) <= levelNumber;
|
|
1512
|
+
logger.isDebug = this._logLevelIndexMap.get(LogLevel.debug) <= levelNumber;
|
|
1513
|
+
logger.isTrack = this._logLevelIndexMap.get(LogLevel.track) <= levelNumber;
|
|
1514
|
+
logger.isTrace = this._logLevelIndexMap.get(LogLevel.trace) <= levelNumber;
|
|
1440
1515
|
}
|
|
1441
1516
|
_setContext(logger, context) {
|
|
1442
1517
|
logger.context = context ?? {};
|
|
@@ -1459,11 +1534,40 @@ var LogM8 = class {
|
|
|
1459
1534
|
}
|
|
1460
1535
|
}
|
|
1461
1536
|
}
|
|
1537
|
+
_createAndInitAppender(appenderConfigOrName) {
|
|
1538
|
+
const appender = this._pluginManager.createPlugin(
|
|
1539
|
+
PluginKind.appender,
|
|
1540
|
+
appenderConfigOrName
|
|
1541
|
+
);
|
|
1542
|
+
const appenderConfig = LogM8Utils.isString(appenderConfigOrName) ? {
|
|
1543
|
+
name: appender.name
|
|
1544
|
+
} : appenderConfigOrName;
|
|
1545
|
+
const formatter = appenderConfig?.formatter ? this._pluginManager.createPlugin(
|
|
1546
|
+
PluginKind.formatter,
|
|
1547
|
+
appenderConfig.formatter
|
|
1548
|
+
) : void 0;
|
|
1549
|
+
const filters = [];
|
|
1550
|
+
const ac = appenderConfig;
|
|
1551
|
+
for (const filterConfig of ac.filters ?? []) {
|
|
1552
|
+
const filter = this._pluginManager.createPlugin(PluginKind.filter, filterConfig);
|
|
1553
|
+
if (filter) {
|
|
1554
|
+
filters.push(filter);
|
|
1555
|
+
} else {
|
|
1556
|
+
if (console && console.log) {
|
|
1557
|
+
console.log(
|
|
1558
|
+
`LogM8: Filter '${filterConfig}' not found for appender ${appenderConfig.name}.`
|
|
1559
|
+
);
|
|
1560
|
+
}
|
|
1561
|
+
}
|
|
1562
|
+
}
|
|
1563
|
+
appender.init(appenderConfig, formatter, filters);
|
|
1564
|
+
return appender;
|
|
1565
|
+
}
|
|
1462
1566
|
_getAppender(name) {
|
|
1463
1567
|
return this._appenders.find((a) => a.name === name);
|
|
1464
1568
|
}
|
|
1465
1569
|
_sortAppenders() {
|
|
1466
|
-
this._appenders.sort((a, b) => {
|
|
1570
|
+
this._appenders = [...this._appenders].sort((a, b) => {
|
|
1467
1571
|
const aPriority = a?.priority ?? 0;
|
|
1468
1572
|
const bPriority = b?.priority ?? 0;
|
|
1469
1573
|
return bPriority - aPriority;
|
|
@@ -1481,6 +1585,15 @@ var LogM8 = class {
|
|
|
1481
1585
|
}
|
|
1482
1586
|
};
|
|
1483
1587
|
|
|
1588
|
+
// src/_generated/package_info.ts
|
|
1589
|
+
var PACKAGE_INFO = {
|
|
1590
|
+
"name": "@ncoderz/log-m8",
|
|
1591
|
+
"version": "1.3.0",
|
|
1592
|
+
"author": "RA Sewell <richard.sewell@ncoderz.com>",
|
|
1593
|
+
"license": "BSD-2-Clause",
|
|
1594
|
+
"description": "Logging system for TypeScript / JavaScript"
|
|
1595
|
+
};
|
|
1596
|
+
|
|
1484
1597
|
// src/NullLogger.ts
|
|
1485
1598
|
var NullLogger = class {
|
|
1486
1599
|
constructor() {
|
|
@@ -1523,10 +1636,16 @@ var NullLogger = class {
|
|
|
1523
1636
|
// src/index.ts
|
|
1524
1637
|
var LogM82 = new LogM8();
|
|
1525
1638
|
export {
|
|
1639
|
+
ConsoleAppender,
|
|
1640
|
+
DefaultFormatter,
|
|
1641
|
+
FileAppender,
|
|
1642
|
+
JsonFormatter,
|
|
1526
1643
|
LogLevel,
|
|
1527
1644
|
LogM82 as LogM8,
|
|
1528
1645
|
LogM8Utils,
|
|
1646
|
+
MatchFilter,
|
|
1529
1647
|
NullLogger,
|
|
1648
|
+
PACKAGE_INFO,
|
|
1530
1649
|
PluginKind
|
|
1531
1650
|
};
|
|
1532
1651
|
//# sourceMappingURL=index.js.map
|