@creejs/commons-logging 2.0.0 → 2.0.2

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.
Files changed (49) hide show
  1. package/dist/cjs/index-dev.cjs +1450 -0
  2. package/dist/cjs/index-dev.cjs.map +1 -0
  3. package/dist/cjs/index-min.cjs +2 -0
  4. package/dist/cjs/index-min.cjs.map +1 -0
  5. package/dist/esm/index-dev.js +1424 -0
  6. package/dist/esm/index-dev.js.map +1 -0
  7. package/dist/esm/index-min.js +2 -0
  8. package/dist/esm/index-min.js.map +1 -0
  9. package/dist/umd/index.dev.js +1456 -0
  10. package/dist/umd/index.dev.js.map +1 -0
  11. package/dist/umd/index.min.js +2 -0
  12. package/dist/umd/index.min.js.map +1 -0
  13. package/index.js +2 -3
  14. package/package.json +38 -7
  15. package/types/console/console-log-factory.d.ts +2 -3
  16. package/types/console/console-log-provider.d.ts +3 -4
  17. package/types/console/console-logger.d.ts +2 -3
  18. package/types/console/index.d.ts +2 -2
  19. package/types/index.d.ts +33 -8
  20. package/types/log-config.d.ts +25 -2
  21. package/types/log-factory.d.ts +2 -3
  22. package/types/log-level.d.ts +21 -8
  23. package/types/log4js/index.d.ts +2 -2
  24. package/types/log4js/log4js-6x-config.d.ts +13 -10
  25. package/types/log4js/log4js-factory.d.ts +2 -3
  26. package/types/log4js/log4js-logger.d.ts +2 -3
  27. package/types/log4js/log4js-provider.d.ts +3 -4
  28. package/types/logger.d.ts +2 -3
  29. package/types/provider-type.d.ts +5 -0
  30. package/types/provider.d.ts +2 -3
  31. package/lib/console/console-log-factory.js +0 -76
  32. package/lib/console/console-log-provider.js +0 -29
  33. package/lib/console/console-logger.js +0 -88
  34. package/lib/console/index.js +0 -11
  35. package/lib/index.js +0 -259
  36. package/lib/log-config.js +0 -163
  37. package/lib/log-factory.js +0 -88
  38. package/lib/log-level.js +0 -169
  39. package/lib/log4js/index.js +0 -11
  40. package/lib/log4js/log4js-6x-config.js +0 -12
  41. package/lib/log4js/log4js-factory.js +0 -90
  42. package/lib/log4js/log4js-logger.js +0 -111
  43. package/lib/log4js/log4js-provider.js +0 -35
  44. package/lib/logger.js +0 -285
  45. package/lib/provider-type.js +0 -22
  46. package/lib/provider.js +0 -53
  47. package/types/console-logger.d.ts +0 -7
  48. package/types/log4js-logger.d.ts +0 -13
  49. package/types/logging-level.d.ts +0 -41
@@ -0,0 +1,1456 @@
1
+ (function (global, factory) {
2
+ typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :
3
+ typeof define === 'function' && define.amd ? define(['exports'], factory) :
4
+ (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.CommonsLang = {}));
5
+ })(this, (function (exports) { 'use strict';
6
+
7
+ var r={isFunction:u,isNumber:y,isNil:l,isString:d};function u(t){return "function"==typeof t}function l(t){return null==t}function y(t){return null!=t&&"number"==typeof t}function d(t){return null!=t&&"string"==typeof t}var N={assertNotNil:function(t,e){if(l(t))throw new Error((e?'"'+e+'" ':" ")+"Should Not Nil")},assertString:b};function b(t,e){if(!d(t))throw new Error(`${e?'"'+e+'" ':" "}Not String: type=${typeof t} value=${JSON.stringify(t)}`)}
8
+
9
+ const { isNumber, isString } = r;
10
+ /**
11
+ * @namespace LogLevel
12
+ * @description Defines the logging levels and provides utilities for working with them.
13
+ */
14
+ // module vars
15
+ const TRACE = 'TRACE';
16
+ const DEBUG = 'DEBUG';
17
+ const INFO = 'INFO';
18
+ const WARN = 'WARN';
19
+ const ERROR = 'ERROR';
20
+ const FATAL = 'FATAL';
21
+ const OFF = 'OFF';
22
+ const ALL = 'ALL';
23
+
24
+ const Names = new Set([TRACE, DEBUG, INFO, WARN, ERROR, FATAL, OFF, ALL]);
25
+ /**
26
+ * The logging level numbers, where OFF=-1, FATAL=0, ERROR=1, WARN=2, INFO=3, DEBUG=4, TRACE=5, ALL=6
27
+ * @enum {number}
28
+ * @memberof LogLevel
29
+ * @static
30
+ */
31
+ const Level$1 = {
32
+ OFF: -1,
33
+ FATAL: 0,
34
+ ERROR: 1,
35
+ WARN: 2,
36
+ INFO: 3,
37
+ DEBUG: 4,
38
+ TRACE: 5,
39
+ ALL: 6
40
+ };
41
+
42
+ /**
43
+ * Standard logging level names
44
+ * @enum {string}
45
+ * @memberof LogLevel
46
+ * @static
47
+ * @constant
48
+ */
49
+ const Name = {
50
+ TRACE,
51
+ DEBUG,
52
+ INFO,
53
+ WARN,
54
+ ERROR,
55
+ FATAL,
56
+ OFF
57
+ };
58
+
59
+ /**
60
+ * Internal map for quick lookup of level names by their numeric values
61
+ * @type {Map<number, string>}
62
+ * @private
63
+ */
64
+ const Value2Name = new Map();
65
+ for (const [name, value] of Object.entries(Level$1)) {
66
+ Value2Name.set(value, name);
67
+ }
68
+
69
+ /**
70
+ * The default logging level (ERROR)
71
+ * @type {number}
72
+ * @memberof LogLevel
73
+ * @static
74
+ */
75
+ const DefaultLevel$1 = Level$1.ERROR;
76
+
77
+ /**
78
+ * Converts a numeric logging level value to its corresponding name.
79
+ * @param {number} value - The numeric logging level value to convert.
80
+ * @returns {string|undefined} The name associated with the given logging level value, from {@link LogLevel.Name}.
81
+ * @memberof LogLevel
82
+ * @static
83
+ */
84
+ function value2Name (value) {
85
+ if (!isNumber(value)) {
86
+ return undefined
87
+ }
88
+ return Value2Name.get(value)
89
+ }
90
+
91
+ /**
92
+ * Converts a logging level name to its corresponding numeric value.
93
+ * @param {string} name - The name of the logging level.
94
+ * @returns {number|undefined} The numeric value of the logging level from {@link LogLevel.Level}, or undefined if name is not supported.
95
+ * @memberof LogLevel
96
+ * @static
97
+ */
98
+ function name2Value (name) {
99
+ if (!isString(name)) {
100
+ return undefined
101
+ }
102
+ // @ts-ignore
103
+ return Level$1[name.toUpperCase()]
104
+ }
105
+
106
+ /**
107
+ * Checks if the given level is a valid log level.
108
+ * @param {number} level - The log level to check.
109
+ * @returns {boolean} True if the level is valid, false otherwise.
110
+ * @memberof LogLevel
111
+ * @static
112
+ */
113
+ function hasLevel (level) {
114
+ return Value2Name.has(level)
115
+ }
116
+
117
+ /**
118
+ * Checks if the given level name exists in the Name enum/object.
119
+ * @param {string} levelName - The name of the log level to check.
120
+ * @returns {boolean} True if the level name exists, false otherwise.
121
+ * @memberof LogLevel
122
+ * @static
123
+ */
124
+ function hasName (levelName) {
125
+ if (!isString(levelName)) {
126
+ return false
127
+ }
128
+ return Names.has(levelName.toUpperCase())
129
+ }
130
+
131
+ /**
132
+ * Validates that a given level is a number and falls within the valid range.
133
+ * @param {*} level - The log level to validate
134
+ * @throws {Error} If level is not a number or outside valid range (Level.OFF to Level.ALL)
135
+ * @memberof LogLevel
136
+ * @static
137
+ */
138
+ function assertLevel$1 (level) {
139
+ if (!isNumber(level)) {
140
+ throw new Error(`Level Not Number: type=${typeof level} value=${level}`)
141
+ }
142
+ if (level < Level$1.OFF || level > Level$1.ALL) {
143
+ throw new Error(`Not Valid Level: ${level}, Expect between ${Level$1.OFF} and ${Level$1.ALL}`)
144
+ }
145
+ }
146
+
147
+ const LogLevel = {
148
+ Name,
149
+ Level: Level$1,
150
+ DefaultLevel: DefaultLevel$1,
151
+ hasLevel,
152
+ hasName,
153
+ assertLevel: assertLevel$1,
154
+ /**
155
+ * Same with [Name]{@link LogLevel.Name}
156
+ * @type {Object}
157
+ * @memberof LogLevel
158
+ * @static
159
+ */
160
+ LevelName: Name,
161
+ /**
162
+ * Same with [Level]{@link LogLevel.Level}
163
+ * @type {Object}
164
+ * @memberof LogLevel
165
+ * @static
166
+ */
167
+ LevelValue: Level$1,
168
+
169
+ value2Name,
170
+
171
+ name2Value
172
+ };
173
+
174
+ // internal
175
+
176
+ const { Level, DefaultLevel, assertLevel } = LogLevel;
177
+ const { assertString: assertString$3 } = N;
178
+ /**
179
+ * Abstract Logger Class of All Logger
180
+ * @abstract
181
+ */
182
+ class Logger {
183
+ /**
184
+ * Creates a new Logger instance.
185
+ * @constructor
186
+ * @param {string} name - The name identifier for the logger
187
+ * @param {*} [nativeLogger]
188
+ * @param {number} [level] - The logging level, default is Level.ERROR=1
189
+ */
190
+ constructor (name, nativeLogger, level = DefaultLevel) {
191
+ assertString$3(name);
192
+ assertLevel(level);
193
+ this._name = name;
194
+ this._nativeLogger = nativeLogger;
195
+ this._level = level;
196
+ }
197
+
198
+ get nativeLogger () {
199
+ return this._nativeLogger
200
+ }
201
+
202
+ get level () {
203
+ return this._level
204
+ }
205
+
206
+ /**
207
+ * Gets the name of the logger instance.
208
+ * @returns {string} The name of the logger.
209
+ */
210
+ get name () {
211
+ return this._name
212
+ }
213
+
214
+ /**
215
+ * Checks if FATAL level logging is enabled for this logger.
216
+ * @returns {boolean} True if FATAL level logging is enabled, false otherwise.
217
+ */
218
+ get fatalEnabled () {
219
+ return this.level >= Level.FATAL
220
+ }
221
+
222
+ /**
223
+ * Checks if ERROR level logging is enabled for this logger.
224
+ * @returns {boolean} True if ERROR level logging is enabled, false otherwise.
225
+ */
226
+ get errorEnabled () {
227
+ return this.level >= Level.ERROR
228
+ }
229
+
230
+ /**
231
+ * Checks if WARN level logging is enabled for this logger.
232
+ * @returns {boolean} True if WARN level logging is enabled, false otherwise.
233
+ */
234
+ get warnEnabled () {
235
+ return this.level >= Level.WARN
236
+ }
237
+
238
+ /**
239
+ * Checks if DEBUG level logging is enabled for this logger.
240
+ * @returns {boolean} True if DEBUG level logging is enabled, false otherwise.
241
+ */
242
+ get debugEnabled () {
243
+ return this.level >= Level.DEBUG
244
+ }
245
+
246
+ /**
247
+ * Checks if INFO level logging is enabled for this logger.
248
+ * @returns {boolean} True if INFO level logging is enabled, false otherwise.
249
+ */
250
+ get infoEnabled () {
251
+ return this.level >= Level.INFO
252
+ }
253
+
254
+ /**
255
+ * Checks if TRACE level logging is enabled for this logger.
256
+ * @returns {boolean} True if TRACE level logging is enabled, false otherwise.
257
+ */
258
+ get traceEnabled () {
259
+ return this.level >= Level.TRACE
260
+ }
261
+
262
+ /**
263
+ * change log level for current logger instance.
264
+ * @param {number} level - new log level to set
265
+ * @throws {Error} Currently throws an error as this method is Not Impled Yet.
266
+ * @abstract
267
+ */
268
+ setLevel (level) {
269
+ LogLevel.assertLevel(level);
270
+ this._setLevel(level);
271
+ this._level = level;
272
+ }
273
+
274
+ /**
275
+ * Logs a fatal error message with timestamp and logger name.
276
+ * Only outputs if fatal logging is enabled for this logger instance.
277
+ * @param {...any} args - Arguments to log (will be space-separated)
278
+ */
279
+ fatal (...args) {
280
+ if (this.fatalEnabled) {
281
+ this._fatal(...args);
282
+ }
283
+ }
284
+
285
+ /**
286
+ * Logs an error message to the console with timestamp and logger name.
287
+ * Only logs if error logging is enabled for this logger instance.
288
+ * @param {...any} args - Arguments to be logged as error message
289
+ */
290
+ error (...args) {
291
+ if (this.errorEnabled) {
292
+ this._error(...args);
293
+ }
294
+ }
295
+
296
+ /**
297
+ * Logs a warning message to the console if warn logging is enabled.
298
+ * @param {...any} args - The arguments to log as a warning message.
299
+ */
300
+ warn (...args) {
301
+ if (this.warnEnabled) {
302
+ this._warn(...args);
303
+ }
304
+ }
305
+
306
+ /**
307
+ * Logs debug messages to console if debug mode is enabled.
308
+ * @param {...any} args - The data to be logged
309
+ */
310
+ debug (...args) {
311
+ if (this.debugEnabled) {
312
+ this._debug(...args);
313
+ }
314
+ }
315
+
316
+ /**
317
+ * Logs an info message to the console with timestamp and logger name.
318
+ * @param {...any} args - The data to be logged. Accepts multiple arguments.
319
+ */
320
+ info (...args) {
321
+ if (this.infoEnabled) {
322
+ this._info(...args);
323
+ }
324
+ }
325
+
326
+ /**
327
+ * Logs a trace message with timestamp and logger name if trace logging is enabled.
328
+ * @param {...any} args - Data to be logged as trace message.
329
+ */
330
+ trace (...args) {
331
+ if (this.traceEnabled) {
332
+ this._trace(...args);
333
+ }
334
+ }
335
+
336
+ /**
337
+ * Checks if FATAL level logging is enabled for this logger.
338
+ * @returns {boolean} True if FATAL level logging is enabled, false otherwise.
339
+ */
340
+ isFatalEnabled () {
341
+ return this.fatalEnabled
342
+ }
343
+
344
+ /**
345
+ * Checks if ERROR level logging is enabled for this logger.
346
+ * @returns {boolean} True if ERROR level logging is enabled, false otherwise.
347
+ */
348
+ isErrorEnabled () {
349
+ return this.errorEnabled
350
+ }
351
+
352
+ /**
353
+ * Checks if WARN level logging is enabled for this logger.
354
+ * @returns {boolean} True if WARN level logging is enabled, false otherwise.
355
+ */
356
+ isWarnEnabled () {
357
+ return this.warnEnabled
358
+ }
359
+
360
+ /**
361
+ * Checks if DEBUG level logging is enabled for this logger.
362
+ * @returns {boolean} True if DEBUG level logging is enabled, false otherwise.
363
+ */
364
+ isDebugEnabled () {
365
+ return this.debugEnabled
366
+ }
367
+
368
+ /**
369
+ * Checks if INFO level logging is enabled for this logger.
370
+ * @returns {boolean} True if INFO level logging is enabled, false otherwise.
371
+ */
372
+ isInfoEnabled () {
373
+ return this.infoEnabled
374
+ }
375
+
376
+ /**
377
+ * Checks if TRACE level logging is enabled for this logger.
378
+ * @returns {boolean} True if TRACE level logging is enabled, false otherwise.
379
+ */
380
+ isTraceEnabled () {
381
+ return this.traceEnabled
382
+ }
383
+
384
+ /**
385
+ * Sets the logging level
386
+ * @param {number} level
387
+ * @throws {Error} Always throws "Not Impled Yet Yet" error.
388
+ * @protected
389
+ * @abstract
390
+ */
391
+ _setLevel (level) {
392
+ throw new Error('Not Impled Yet')
393
+ }
394
+
395
+ /**
396
+ * Override this method to implement fatal logging.
397
+ * @protected
398
+ * @param {...*} args - Variable arguments
399
+ * @throws {Error} Always throws "Not Impled Yet Yet" error
400
+ */
401
+ _fatal (...args) {
402
+ throw new Error('Not Impled Yet')
403
+ }
404
+
405
+ /**
406
+ * Override this method to implement error logging.
407
+ * @protected
408
+ * @param {...*} args - Variable arguments
409
+ * @throws {Error} Always throws "Not Impled Yet Yet" error
410
+ */
411
+ _error (...args) {
412
+ throw new Error('Not Impled Yet')
413
+ }
414
+
415
+ /**
416
+ * Override this method to implement warn logging.
417
+ * @protected
418
+ * @param {...*} args - Variable arguments
419
+ * @throws {Error} Always throws "Not Impled Yet Yet" error
420
+ */
421
+ _warn (...args) {
422
+ throw new Error('Not Impled Yet')
423
+ }
424
+
425
+ /**
426
+ * Override this method to implement debug logging.
427
+ * @protected
428
+ * @param {...*} args - Variable arguments
429
+ * @throws {Error} Always throws "Not Impled Yet Yet" error
430
+ */
431
+ _debug (...args) {
432
+ throw new Error('Not Impled Yet')
433
+ }
434
+
435
+ /**
436
+ * Override this method to implement info logging.
437
+ * @protected
438
+ * @param {...*} args - Variable arguments
439
+ * @throws {Error} Always throws "Not Impled Yet Yet" error
440
+ */
441
+ _info (...args) {
442
+ throw new Error('Not Impled Yet')
443
+ }
444
+
445
+ /**
446
+ * Override this method to implement trace logging.
447
+ * @protected
448
+ * @param {...*} args - Variable arguments
449
+ * @throws {Error} Always throws "Not Impled Yet Yet" error
450
+ */
451
+ _trace (...args) {
452
+ throw new Error('Not Impled Yet')
453
+ }
454
+ }
455
+
456
+ // owned
457
+ // eslint-disable-next-line no-unused-vars
458
+
459
+ /**
460
+ * @abstract
461
+ */
462
+ class LogFactory {
463
+ /**
464
+ * Checks if a value resembles a LogFactory by verifying it has required methods.
465
+ * @param {*} value - The value to check
466
+ * @returns {boolean}
467
+ */
468
+ static isLogFactoryLike (value) {
469
+ if (value == null) {
470
+ return false
471
+ }
472
+ return typeof value === 'object' && typeof value.createLogger === 'function' && typeof value.setLevel === 'function'
473
+ }
474
+
475
+ /**
476
+ * Asserts that the given value is a valid LogFactory-Like object.
477
+ * @throws {Error} Throws an error if the value is not LogFactory-Like
478
+ * @param {*} value - The value to check.
479
+ */
480
+ static assertLogFactoryLike (value) {
481
+ if (!this.isLogFactoryLike(value)) {
482
+ throw new Error('Not LogFactory')
483
+ }
484
+ }
485
+
486
+ /**
487
+ * Creates a new logging provider instance.
488
+ * @param {{}} libraryModule - the library module
489
+ * @param {{}} setting - Configuration settings for the provider
490
+ */
491
+ constructor (libraryModule, setting) {
492
+ this._libraryModule = libraryModule;
493
+ this._setting = setting;
494
+ }
495
+
496
+ get libraryModule () {
497
+ return this._libraryModule
498
+ }
499
+
500
+ get setting () {
501
+ return this._setting
502
+ }
503
+
504
+ /**
505
+ * Initializes the logging provider.
506
+ * 1. Do nothing in the default implementation.
507
+ * 2. Override this method to initialize the provider.
508
+ * @returns {Promise<void>|void}
509
+ */
510
+ init () {
511
+ // do nothing
512
+ }
513
+
514
+ /**
515
+ * Update factory's Log Level
516
+ * 1. Only Provider knows how to update
517
+ * * update level in "setting", so the new created Logger will use the new level
518
+ * 2. called when users want to change global log level via CommonsLogging.setLevel()
519
+ * @param {number} level - The log level to set, see {@link LogLevel.Level}
520
+ * @returns {void}
521
+ * @throws {Error} Throws an error as this method is Not Impled Yet.
522
+ * @abstract
523
+ */
524
+ setLevel (level) {
525
+ throw new Error('Not Impled Yet')
526
+ }
527
+
528
+ /**
529
+ * Creates a new logger named with the "loggerName"
530
+ * @param {string} loggerName - The name to associate with the logger instance.
531
+ * @throws {Error} Throws an error indicating the method is Not Impled Yet yet.
532
+ * @returns {Logger} A new logger intance
533
+ * @abstract
534
+ */
535
+ createLogger (loggerName) {
536
+ throw new Error('Not Impled Yet')
537
+ }
538
+ }
539
+
540
+ /**
541
+ * @type {string}
542
+ * @memberof ProviderType
543
+ */
544
+ const Log4js = 'LOG4JS';
545
+ /**
546
+ * @type {string}
547
+ * @memberof ProviderType
548
+ */
549
+ const Console = 'CONSOLE';
550
+
551
+ /**
552
+ * @namespace ProviderType
553
+ * @description Define the static types
554
+ */
555
+ var ProviderType = {
556
+ Log4js,
557
+ Console
558
+ };
559
+
560
+ // owned
561
+ // eslint-disable-next-line no-unused-vars
562
+
563
+ /**
564
+ * A interface that All Provider module must export
565
+ * @interface
566
+ */
567
+ class Provider {
568
+ /**
569
+ * Checks if a value resembles a logging provider by verifying it has required methods.
570
+ * @param {*} value - The value to check
571
+ * @returns {boolean}
572
+ */
573
+ static isProviderLike (value) {
574
+ if (value == null) {
575
+ return false
576
+ }
577
+ return typeof value === 'object' && typeof value.createLogFactory === 'function' && typeof value.getType === 'function'
578
+ }
579
+
580
+ /**
581
+ * Asserts that the given value is a valid provider-like object.
582
+ * @throws {Error} Throws an error if the value is not provider-like.
583
+ * @param {*} value - The value to check.
584
+ */
585
+ static assertProviderLike (value) {
586
+ if (!this.isProviderLike(value)) {
587
+ throw new Error('Not LogProvider')
588
+ }
589
+ }
590
+
591
+ /**
592
+ * The Type Name of current Provider
593
+ * @return {String} The type of the provider.
594
+ */
595
+ getType () {
596
+ throw new Error('Not Impled Yet')
597
+ }
598
+
599
+ /**
600
+ * Create a new LogFactory instance
601
+ * @param {*} [nativeLib] - The native library to use for logging.
602
+ * @param {*} [setting] - Configuration settings for the logging provider.
603
+ * @returns {LogFactory} A new instance of LogFactory.
604
+ */
605
+ createLogFactory (nativeLib, setting) {
606
+ throw new Error('Not Impled Yet')
607
+ }
608
+ }
609
+
610
+ // internal
611
+
612
+ const { assertString: assertString$2 } = N;
613
+
614
+ /**
615
+ * @module LogConfig
616
+ * @description Provide Impl of Log Configuration
617
+ * @private
618
+ */
619
+
620
+ /**
621
+ * type name of current provider
622
+ * @type {string}
623
+ * @public
624
+ */
625
+ // @ts-ignore
626
+ // eslint-disable-next-line prefer-const
627
+ let currentProvider$1 = null;
628
+
629
+ /**
630
+ * Global logging level
631
+ * @type {number}
632
+ * @public
633
+ */
634
+ // @ts-ignore
635
+ // eslint-disable-next-line prefer-const
636
+ let currentLevel = DefaultLevel$1;
637
+
638
+ /**
639
+ * The map of registered logging libraries
640
+ * @type {Map<string,Provider>}
641
+ * @private
642
+ */
643
+ const type2Provider = new Map();
644
+
645
+ /**
646
+ * Adds a logging provider for the specified type.
647
+ * @param {string} typeName - The type identifier for the provider.
648
+ * @param {Provider} provider - The logging provider implementation.
649
+ * @returns {void}
650
+ * @alias module:LogConfig.addProvider
651
+ */
652
+ function addProvider$1 (typeName, provider) {
653
+ assertString$2(typeName);
654
+ Provider.assertProviderLike(provider);
655
+ type2Provider.set(typeName.toUpperCase(), provider);
656
+ }
657
+
658
+ /**
659
+ * Gets the logging provider for the specified type name.
660
+ * @param {string} typeName - The type name to look up in the provider map.
661
+ * @returns {Provider|undefined} The logging provider instance if found, otherwise undefined.
662
+ */
663
+ function getProvider (typeName) {
664
+ assertString$2(typeName);
665
+ return type2Provider.get(typeName.toUpperCase())
666
+ }
667
+
668
+ /**
669
+ * Removes a logging provider of the specified type.
670
+ * @param {string} typeName - The type name of the provider to remove.
671
+ * @returns {boolean}
672
+ */
673
+ function removeProvider$1 (typeName) {
674
+ assertString$2(typeName);
675
+ return type2Provider.delete(typeName.toUpperCase())
676
+ }
677
+
678
+ function clearProviders$1 () {
679
+ type2Provider.clear();
680
+ }
681
+
682
+ /**
683
+ * Returns an array of all registered factory types and intances.
684
+ * 1. Each entry is a [type, factory] pair
685
+ * @returns {Array<{0:string, 1:Provider}>} An array of factory entries.
686
+ */
687
+ function listProviders () {
688
+ return [...type2Provider.entries()]
689
+ }
690
+
691
+ /**
692
+ * Created LogFactories Index with type name
693
+ * @type {Map<string, LogFactory>}
694
+ * @public
695
+ */
696
+ const type2Factory = new Map();
697
+
698
+ /**
699
+ * Registers a log factory for a given type name.
700
+ * @param {string} typeName - The name of the log type to register.
701
+ * @param {LogFactory} logFactory - Factory function that creates a logger for the specified type.
702
+ */
703
+ function addFactory (typeName, logFactory) {
704
+ assertString$2(typeName);
705
+ LogFactory.assertLogFactoryLike(logFactory);
706
+ type2Factory.set(typeName.toUpperCase(), logFactory);
707
+ }
708
+
709
+ /**
710
+ * Removes a factory of the given type from the type-to-factory mapping.
711
+ * @param {string} typeName - The name of the type whose factory should be removed.
712
+ * @returns {boolean}
713
+ */
714
+ function removeFactory (typeName) {
715
+ assertString$2(typeName);
716
+ return type2Factory.delete(typeName.toUpperCase())
717
+ }
718
+
719
+ /**
720
+ * Gets the factory function associated with the given type name.
721
+ * @param {string} typeName - The name of the type to look up.
722
+ * @returns {LogFactory|undefined} The factory function for the specified type.
723
+ */
724
+ function getFactory (typeName) {
725
+ assertString$2(typeName);
726
+ return type2Factory.get(typeName.toUpperCase())
727
+ }
728
+
729
+ /**
730
+ * Clears all registered factories from the type2Factory instance.
731
+ * This is typically used to reset the factory state during testing or teardown.
732
+ */
733
+ function clearFactories () {
734
+ type2Factory.clear();
735
+ }
736
+
737
+ /**
738
+ * Returns an array of all registered factory types and intances.
739
+ * 1. Each entry is a [type, factory] pair
740
+ * @returns {Array<{0:string, 1:LogFactory}>} An array of factory entries.
741
+ */
742
+ function listFactories () {
743
+ return [...type2Factory.entries()]
744
+ }
745
+
746
+ function clear () {
747
+ clearProviders$1();
748
+ clearFactories();
749
+ }
750
+
751
+ var LogConfig = {
752
+ currentProvider: currentProvider$1,
753
+ currentLevel,
754
+ type2Provider,
755
+ type2Factory,
756
+ addProvider: addProvider$1,
757
+ getProvider,
758
+ removeProvider: removeProvider$1,
759
+ clearProviders: clearProviders$1,
760
+ listProviders,
761
+ addFactory,
762
+ getFactory,
763
+ removeFactory,
764
+ clearFactories,
765
+ listFactories,
766
+ clear
767
+ };
768
+
769
+ // 3rd
770
+ // internal
771
+ // owned
772
+ // module vars
773
+ /**
774
+ * A Simple Implementation of the Logger interface that logs to the console.
775
+ */
776
+ class ConsoleLogger extends Logger {
777
+ /**
778
+ * Creates a ConsoleLogger instance.
779
+ * @constructor
780
+ * @param {string} name - The logger name.
781
+ * @param {*} nativeLogger - The native console object to use for logging.
782
+ * @param {number} level - The initial log level.
783
+ */
784
+ constructor (name, nativeLogger, level) {
785
+ super(name, nativeLogger, level);
786
+ /**
787
+ * @type {{error:function, warn:function, debug:function, log:function, info:function, trace:function}}
788
+ */
789
+ this.console = nativeLogger;
790
+ }
791
+
792
+ /**
793
+ * For ConsoleLogger, Nothing to do
794
+ * @param {number} level
795
+ * @override
796
+ * @protectd
797
+ */
798
+ _setLevel (level) {
799
+ // do nothing
800
+ }
801
+
802
+ /**
803
+ * Logs a fatal error message with timestamp and logger name.
804
+ * Only outputs if fatal logging is enabled for this logger instance.
805
+ * @param {...any} args
806
+ */
807
+ _fatal (...args) {
808
+ this.console.error(new Date().toISOString(), this.name, '[Fatal]', ...args);
809
+ }
810
+
811
+ /**
812
+ * Logs an error message to the console with timestamp and logger name.
813
+ * Only logs if error logging is enabled for this logger instance.
814
+ * @param {...any} args
815
+ */
816
+ _error (...args) {
817
+ this.console.error(new Date().toISOString(), this.name, '[Error]', ...args);
818
+ }
819
+
820
+ /**
821
+ * Logs a warning message to the console if warn logging is enabled.
822
+ * @param {...any} args
823
+ */
824
+ _warn (...args) {
825
+ this.console.warn(new Date().toISOString(), this.name, '[Warn]', ...args);
826
+ }
827
+
828
+ /**
829
+ * Logs debug messages to console if debug mode is enabled.
830
+ * @param {...any} args
831
+ */
832
+ _debug (...args) {
833
+ this.console.debug(new Date().toISOString(), this.name, '[Debug]', ...args);
834
+ }
835
+
836
+ /**
837
+ * Logs an info message to the console with timestamp and logger name.
838
+ * @param {...any} args
839
+ */
840
+ _info (...args) {
841
+ this.console.log(new Date().toISOString(), this.name, '[Info]', ...args);
842
+ }
843
+
844
+ /**
845
+ * Logs a trace message with timestamp and logger name if trace logging is enabled.
846
+ * @param {...any} args
847
+ */
848
+ _trace (...args) {
849
+ this.console.log(new Date().toISOString(), this.name, '[Trace]', ...args);
850
+ }
851
+ }
852
+
853
+ // owned
854
+ // eslint-disable-next-line no-unused-vars
855
+
856
+ /**
857
+ * Use Console as the native library
858
+ */
859
+ class ConsoleLogFactory extends LogFactory {
860
+ /**
861
+ * the underlying "Console" Object.
862
+ * @returns {{}}
863
+ */
864
+ get console () {
865
+ return this._libraryModule // it's the embedded "console" object
866
+ }
867
+
868
+ /**
869
+ * Gets the current logging settings
870
+ * @returns {{level:number}} The logging settings object containing the current log level.
871
+ */
872
+ get setting () {
873
+ if (this._setting == null) {
874
+ this._setting = {
875
+ level: LogConfig.currentLevel
876
+ };
877
+ }
878
+ // @ts-ignore
879
+ return this._setting
880
+ }
881
+
882
+ /**
883
+ * Update factory's Log Level
884
+ * 1. Only Provider knows how to update
885
+ * @param {number} level - The log level to set, see {@link LogLevel.Level}
886
+ * @returns {void}
887
+ * @throws {Error} Throws an error as this method is Not Impled Yet.
888
+ * @abstract
889
+ */
890
+ setLevel (level) {
891
+ assertLevel$1(level);
892
+ if (level !== this.setting.level) {
893
+ this.setting.level = level;
894
+ }
895
+ // init again
896
+ this.init();
897
+ }
898
+
899
+ /**
900
+ * Initializes the log4js provider by configuring it with the provided settings.
901
+ * @async
902
+ * @override
903
+ * @returns {Promise<void>|void}
904
+ */
905
+ init () {
906
+ // do nothing
907
+ }
908
+
909
+ /**
910
+ * Creates a new logger instance with the specified name and log level.
911
+ * @param {string} loggerName - The name of the logger to create.
912
+ * @returns {Logger} A new logger instance configured with the given name and level.
913
+ * @override
914
+ */
915
+ createLogger (loggerName) {
916
+ return new ConsoleLogger(loggerName, this.console, this.setting.level)
917
+ }
918
+ }
919
+
920
+ // owned
921
+
922
+ class ConsoleProvider extends Provider {
923
+ /**
924
+ * Gets the provider type (Console).
925
+ * @returns {string} "CONSOLE"
926
+ * @override
927
+ */
928
+ getType () {
929
+ return ProviderType.Console
930
+ }
931
+
932
+ /**
933
+ * Creates a new Provider instance.
934
+ * @param {Object} libraryModule - The library module to be used.
935
+ * @param {Object} setting - Configuration settings for the provider.
936
+ * @returns {ConsoleLogFactory} A new instance of ConsoleProvider.
937
+ * @override
938
+ */
939
+ createLogFactory (libraryModule, setting) {
940
+ return new ConsoleLogFactory(libraryModule, setting)
941
+ }
942
+ }
943
+
944
+ // internal
945
+
946
+
947
+ // module vars
948
+ const provider = new ConsoleProvider();
949
+
950
+ // 3rd
951
+ // internal
952
+ // owned
953
+ // module vars
954
+
955
+ class Log4jsLogger extends Logger {
956
+ /**
957
+ * Creates a new ConsoleLogger instance.
958
+ * @constructor
959
+ * @param {string} name - The name of the logger.
960
+ * @param {*} nativeLogger - Log4js library
961
+ */
962
+ constructor (name, nativeLogger) {
963
+ super(name, nativeLogger);
964
+ // @ts-ignore
965
+ this._level = undefined; // MUST NOT accept level from outside
966
+ this._logger = nativeLogger;
967
+ }
968
+
969
+ /**
970
+ * 1. log4js may have many categories(loggerName) with diffirent level
971
+ * 2. return the underlying log4js native logger's level
972
+ * @returns {number} The current log level.
973
+ */
974
+ get level () {
975
+ if (this._level == null) {
976
+ const levelName = this._logger.level.levelStr;
977
+ if (levelName == null) {
978
+ return Level$1.OFF
979
+ }
980
+ const level = name2Value(levelName);
981
+ if (level == null) {
982
+ throw new Error(`Unknown level name: ${levelName}`)
983
+ }
984
+ return level
985
+ }
986
+ return this._level
987
+ }
988
+
989
+ /**
990
+ * set log4js native logger's level
991
+ * @param {number} level
992
+ * @override
993
+ * @protectd
994
+ */
995
+ _setLevel (level) {
996
+ assertLevel$1(level);
997
+ const levelName = value2Name(level);
998
+ if (levelName == null) {
999
+ throw new Error(`Invalid log level: ${level}`)
1000
+ }
1001
+ // log4js use string level, eg. 'error, trace'
1002
+ this._logger.level = levelName.toLowerCase();
1003
+ }
1004
+
1005
+ /**
1006
+ * Logs a fatal error message with timestamp and logger name.
1007
+ * Only outputs if fatal logging is enabled for this logger instance.
1008
+ * @param {...any} args - Arguments to log (will be space-separated)
1009
+ */
1010
+ _fatal (...args) {
1011
+ this._logger.fatal(...args);
1012
+ }
1013
+
1014
+ /**
1015
+ * Logs an error message to the console with timestamp and logger name.
1016
+ * Only logs if error logging is enabled for this logger instance.
1017
+ * @param {...any} args - Arguments to be logged as error message
1018
+ */
1019
+ _error (...args) {
1020
+ this._logger.error(...args);
1021
+ }
1022
+
1023
+ /**
1024
+ * Logs a warning message to the console if warn logging is enabled.
1025
+ * @param {...any} args - The arguments to log as a warning message.
1026
+ */
1027
+ _warn (...args) {
1028
+ this._logger.warn(...args);
1029
+ }
1030
+
1031
+ /**
1032
+ * Logs debug messages to console if debug mode is enabled.
1033
+ * @param {...any} args - The data to be logged
1034
+ */
1035
+ _debug (...args) {
1036
+ this._logger.debug(...args);
1037
+ }
1038
+
1039
+ /**
1040
+ * Logs an info message to the console with timestamp and logger name.
1041
+ * @param {...any} args - The data to be logged. Accepts multiple arguments.
1042
+ */
1043
+ _info (...args) {
1044
+ this._logger.info(...args);
1045
+ }
1046
+
1047
+ /**
1048
+ * Logs a trace message with timestamp and logger name if trace logging is enabled.
1049
+ * @param {...any} args - Data to be logged as trace message.
1050
+ */
1051
+ _trace (...args) {
1052
+ this._logger.trace(...args);
1053
+ }
1054
+ }
1055
+
1056
+ const DefaultConfig = { // 6x fromat
1057
+ appenders: {
1058
+ out: { type: 'console' }
1059
+ },
1060
+ categories: {
1061
+ default: { appenders: ['out'], level: 'error' }
1062
+ }
1063
+ };
1064
+
1065
+ // internal
1066
+
1067
+ const { assertString: assertString$1 } = N;
1068
+
1069
+ /**
1070
+ * Use log4js as the logging provider.
1071
+ */
1072
+ class Log4jsFactory extends LogFactory {
1073
+ /**
1074
+ * the log4js module instance.
1075
+ * @returns {{}} The log4js module instance.
1076
+ */
1077
+ get log4js () {
1078
+ return this._libraryModule
1079
+ }
1080
+
1081
+ get setting () {
1082
+ if (this._setting == null) {
1083
+ this._setting = cloneDefaultConfig();
1084
+ }
1085
+ return this._setting
1086
+ }
1087
+
1088
+ /**
1089
+ * Initializes the log4js provider by configuring it with the provided settings.
1090
+ * @override
1091
+ */
1092
+ init () {
1093
+ // @ts-ignore
1094
+ this.log4js.configure(this.setting);
1095
+ }
1096
+
1097
+ /**
1098
+ * Update factory's Log Level
1099
+ * 1. Only Provider knows how to update
1100
+ * @param {number} level - The log level to set, see {@link LogLevel.Level}
1101
+ * @returns {void}
1102
+ * @throws {Error} Throws an error as this method is Not Impled Yet.
1103
+ * @abstract
1104
+ */
1105
+ setLevel (level) {
1106
+ let levelName = value2Name(level);
1107
+ if (levelName == null) {
1108
+ throw new Error(`Invalid log level: ${level}`)
1109
+ }
1110
+ levelName = levelName.toLowerCase();
1111
+ let updated = false;
1112
+ // @ts-ignore
1113
+ const { categories } = this.setting;
1114
+ for (const categoryKey in categories) {
1115
+ const category = categories[categoryKey];
1116
+ const { level: categoryLevel } = category;
1117
+ if (categoryLevel !== levelName) {
1118
+ category.level = levelName.toLowerCase();
1119
+ updated = true;
1120
+ }
1121
+ }
1122
+ // init log4js again
1123
+ updated && this.init();
1124
+ }
1125
+
1126
+ /**
1127
+ * Creates a new logger instance with the specified name and log level.
1128
+ * @param {string} loggerName - The name of the logger to create.
1129
+ * @returns {Logger} A new logger instance configured with the given name and level.
1130
+ * @override
1131
+ */
1132
+ createLogger (loggerName) {
1133
+ assertString$1(loggerName);
1134
+ // @ts-ignore
1135
+ const nativeLogger = this.log4js.getLogger(loggerName);
1136
+ const logger = new Log4jsLogger(loggerName, nativeLogger);
1137
+ return logger
1138
+ }
1139
+ }
1140
+
1141
+ function cloneDefaultConfig () {
1142
+ return JSON.parse(JSON.stringify(DefaultConfig))
1143
+ }
1144
+
1145
+ // internal
1146
+
1147
+ const { assertNotNil: assertNotNil$1 } = N;
1148
+
1149
+ class Log4jsProvider extends Provider {
1150
+ /**
1151
+ * Gets the provider type (Log4js).
1152
+ * @returns {string} "LOG4JS"
1153
+ * @override
1154
+ */
1155
+ getType () {
1156
+ return ProviderType.Log4js
1157
+ }
1158
+
1159
+ /**
1160
+ * Creates a new Provider instance.
1161
+ * @param {*} libraryModule - The library module to be used.
1162
+ * @param {*} setting - Configuration settings for the provider.
1163
+ * @returns {Log4jsFactory} A new instance of Log4jsFactory.
1164
+ * @override
1165
+ */
1166
+ createLogFactory (libraryModule, setting) {
1167
+ assertNotNil$1(libraryModule);
1168
+ const factory = new Log4jsFactory(libraryModule, setting);
1169
+ factory.init();
1170
+ return factory
1171
+ }
1172
+ }
1173
+
1174
+ // internal
1175
+
1176
+
1177
+ // module vars
1178
+ const log4jsProvider = new Log4jsProvider();
1179
+
1180
+ /**
1181
+ * @module CommonsLogging
1182
+ * @description Common logging library
1183
+ *
1184
+ * Follow the sequence to init log system: addProvider() -> use() -> configure() -> getLogger()
1185
+ * 1. Add ability to handle the type of library
1186
+ * * eg. after adding Log4jsProvider, we can use Log4js library
1187
+ * 2. But we MAY NOT use it now.
1188
+ * * call useProvider(typeName) to select which kind of LogProvider Implementation to use.
1189
+ * * call configure(typeName, nativeLib, setting) to LogProvider Implementation
1190
+ */
1191
+ // 3rd
1192
+ // internal
1193
+
1194
+ const { assertNotNil, assertString } = N;
1195
+ const { isFunction, isNil } = r;
1196
+
1197
+ /**
1198
+ * "default" export to support "import CommonsLogging from '@creejs/commons-logging'"
1199
+ */
1200
+ var index = {
1201
+ Provider,
1202
+ LogFactory,
1203
+ Logger,
1204
+ LogLevel,
1205
+ ProviderType,
1206
+ getLogger,
1207
+ setLevel,
1208
+ useProvider,
1209
+ /**
1210
+ * alias for {@link CommonsLogging.useProvider}
1211
+ * @see {@link CommonsLogging.useProvider}
1212
+ * @function
1213
+ * @alias module:CommonsLogging.use
1214
+ */
1215
+ use: useProvider,
1216
+ configureProvider,
1217
+ /**
1218
+ * @function
1219
+ * @alias module:CommonsLogging.confiure
1220
+ */
1221
+ configure: configureProvider,
1222
+ configureThenUseProvider,
1223
+ /**
1224
+ * @function
1225
+ * @alias module:CommonsLogging.configureThenUseProvider
1226
+ */
1227
+ configureThenUse: configureThenUseProvider,
1228
+ addProvider,
1229
+ add: addProvider,
1230
+ clearProviders,
1231
+ currentProvider,
1232
+ /**
1233
+ * @function
1234
+ * @alias module:CommonsLogging.current
1235
+ */
1236
+ current: currentProvider,
1237
+ removeProvider,
1238
+ /**
1239
+ * @function
1240
+ * @alias module:CommonsLogging.remove
1241
+ */
1242
+ remove: removeProvider,
1243
+ /**
1244
+ * @alias module:CommonsLogging.ConsoleProvider
1245
+ */
1246
+ ConsoleProvider: provider,
1247
+ /**
1248
+ * @alias module:CommonsLogging.Log4jsProvider
1249
+ */
1250
+ Log4jsProvider: log4jsProvider
1251
+ };
1252
+
1253
+ // module vars
1254
+
1255
+ /**
1256
+ * Store Created Loggers, indexed with Names
1257
+ * @type {Map<string, Logger>}
1258
+ * @private
1259
+ */
1260
+ const name2Logger = new Map();
1261
+
1262
+ /**
1263
+ * set Global logging level
1264
+ * @param {'TRACE'|'DEBUG'|'INFO'|'WARN'|'ERROR'|'FATAL'|'OFF'|'trace'|'debug'|'info'|'warn'|'error'|'fatal'|'off'} level - The log level
1265
+ */
1266
+ function setLevel (level) {
1267
+ assertString(level);
1268
+ const upperLevel = level.toUpperCase();
1269
+ const levelNumber = LogLevel.name2Value(upperLevel);
1270
+ if (levelNumber == null) {
1271
+ throw new Error(`Invalid log level: ${level}`)
1272
+ }
1273
+ if (levelNumber === LogConfig.currentLevel) {
1274
+ return // no change
1275
+ }
1276
+ LogConfig.currentLevel = levelNumber;
1277
+
1278
+ // refresh existed factories
1279
+ // @ts-ignore
1280
+ // eslint-disable-next-line no-unused-vars
1281
+ for (const [typeName, factory] of LogConfig.listFactories()) {
1282
+ factory.setLevel(levelNumber);
1283
+ }
1284
+ // refresh existed Loggers
1285
+ for (const logger of name2Logger.values()) {
1286
+ if (logger.level !== levelNumber) {
1287
+ logger.setLevel(levelNumber);
1288
+ }
1289
+ }
1290
+ }
1291
+
1292
+ function currentProvider () {
1293
+ return LogConfig.currentProvider
1294
+ }
1295
+
1296
+ /**
1297
+ * Set the provider using currently
1298
+ * @param {string} typeName - The type name of the logging provider to use.
1299
+ * @returns {void}
1300
+ * @throws {Error} If the provider name is unknown.
1301
+ */
1302
+ function useProvider (typeName) {
1303
+ assertString(typeName);
1304
+ typeName = typeName.toUpperCase();
1305
+ const provider = LogConfig.getProvider(typeName);
1306
+ if (provider == null) {
1307
+ throw new Error(`No Provider Named with: ${typeName}`)
1308
+ }
1309
+ LogConfig.currentProvider = typeName;
1310
+ }
1311
+
1312
+ /**
1313
+ * Removes and returns the provider associated with the given type name.
1314
+ * If no provider exists for the type name, the function returns undefined.
1315
+ *
1316
+ * @param {string} typeName - The type name of the provider to remove.
1317
+ * @returns {boolean} The removed provider, or undefined if not found.
1318
+ */
1319
+ function removeProvider (typeName) {
1320
+ if (typeName == null) {
1321
+ return false
1322
+ }
1323
+ assertString(typeName);
1324
+ typeName = typeName.toUpperCase();
1325
+ return LogConfig.removeProvider(typeName)
1326
+ }
1327
+
1328
+ /**
1329
+ * Add a type of Provider
1330
+ *
1331
+ * More:
1332
+ * 1. A Provider is a Module
1333
+ * 2. The module must include the following functions:
1334
+ * 1. getType() - Returns the type name of the provider.
1335
+ * 2. createLogFactory() - Creates a new LogFactory instance.
1336
+ * @param {Provider} provider - Logging Library Module
1337
+ * @returns {void}
1338
+ */
1339
+ function addProvider (provider) {
1340
+ assertNotNil(provider);
1341
+ const { getType, createLogFactory } = provider;
1342
+ if (!isFunction(getType) || !isFunction(createLogFactory)) {
1343
+ throw new Error('Invalid Provider Module, missing getType(), createLogFactory() functions')
1344
+ }
1345
+ let typeName = provider.getType();
1346
+ assertString(typeName);
1347
+ typeName = typeName.toUpperCase();
1348
+ LogConfig.addProvider(typeName, provider);
1349
+ // set current provider if not set yet
1350
+ if (isNil(currentProvider())) {
1351
+ useProvider(typeName);
1352
+ }
1353
+ }
1354
+
1355
+ function clearProviders () {
1356
+ name2Logger.clear();
1357
+ LogConfig.clear();
1358
+ }
1359
+
1360
+ /**
1361
+ * configure provider to initialize its LogFactory
1362
+ * 1. find the LogProvider Implementation of "typeName"
1363
+ * * if type is not supported, throw error
1364
+ * 2. use the nativeLib and setting to initialize the LogProvider
1365
+ * 3. create a LogFactory via teh LogProvider
1366
+ * @param {string} typeName - The type of logging provider to configure.
1367
+ * @param {*} [nativeLib] - The native library to use for logging.
1368
+ * @param {*} [setting] - Configuration settings for the logging provider.
1369
+ * @throws {Error} If the typeName is not recognized.
1370
+ */
1371
+ function configureProvider (typeName, nativeLib, setting) {
1372
+ assertString(typeName);
1373
+ typeName = typeName.toUpperCase();
1374
+ const provider = LogConfig.getProvider(typeName);
1375
+ if (provider == null) {
1376
+ throw new Error(`No Provider: ${typeName}`)
1377
+ }
1378
+ const factory = provider.createLogFactory(nativeLib, setting);
1379
+ LogConfig.addFactory(typeName, factory);
1380
+ }
1381
+
1382
+ /**
1383
+ * Configures and immediately uses a logging provider with the given settings.
1384
+ * @param {string} typeName - The type/name identifier for the provider.
1385
+ * @param {*} nativeLib - The native library implementation to configure.
1386
+ * @param {*} setting - Configuration settings for the provider.
1387
+ */
1388
+ function configureThenUseProvider (typeName, nativeLib, setting) {
1389
+ configureProvider(typeName, nativeLib, setting);
1390
+ useProvider(typeName);
1391
+ }
1392
+
1393
+ /**
1394
+ * Gets a logger instance for the specified logger name using the current provider.
1395
+ * @param {string} loggerName - The name of the logger to retrieve.
1396
+ * @returns {Logger} The logger instance.
1397
+ * @throws {Error} If no default provider is set or if the current provider is not initialized.
1398
+ */
1399
+ function getLogger (loggerName) {
1400
+ // if logger already exists, return it
1401
+ let logger = name2Logger.get(loggerName);
1402
+ if (logger != null) {
1403
+ return logger
1404
+ }
1405
+ // create a new logger via the current provider's LogFactory
1406
+ const currentTypeName = currentProvider();
1407
+ if (currentTypeName == null) {
1408
+ throw new Error('No Default LogProvider, call useProvider(typeName)')
1409
+ }
1410
+ const factory = LogConfig.getFactory(currentTypeName);
1411
+ if (factory == null) {
1412
+ throw new Error('configureProvider(typeName, nativeLib, settting) before getting logger via Provider')
1413
+ }
1414
+ logger = factory.createLogger(loggerName);
1415
+ name2Logger.set(loggerName, logger);
1416
+ return logger
1417
+ }
1418
+
1419
+ function initLogSystem () {
1420
+ addProvider(log4jsProvider);
1421
+ // ConsoleProvider as default impl
1422
+ addProvider(provider);
1423
+ configureProvider(ProviderType.Console, console);
1424
+ useProvider(ProviderType.Console); // Use ConsoleLogger as default
1425
+ }
1426
+
1427
+ initLogSystem();
1428
+
1429
+ exports.ConsoleProvider = provider;
1430
+ exports.Log4jsProvider = log4jsProvider;
1431
+ exports.LogFactory = LogFactory;
1432
+ exports.LogLevel = LogLevel;
1433
+ exports.Logger = Logger;
1434
+ exports.Provider = Provider;
1435
+ exports.ProviderType = ProviderType;
1436
+ exports.add = addProvider;
1437
+ exports.addProvider = addProvider;
1438
+ exports.clearProviders = clearProviders;
1439
+ exports.configure = configureProvider;
1440
+ exports.configureProvider = configureProvider;
1441
+ exports.configureThenUse = configureThenUseProvider;
1442
+ exports.configureThenUseProvider = configureThenUseProvider;
1443
+ exports.current = currentProvider;
1444
+ exports.currentProvider = currentProvider;
1445
+ exports.default = index;
1446
+ exports.getLogger = getLogger;
1447
+ exports.remove = removeProvider;
1448
+ exports.removeProvider = removeProvider;
1449
+ exports.setLevel = setLevel;
1450
+ exports.use = useProvider;
1451
+ exports.useProvider = useProvider;
1452
+
1453
+ Object.defineProperty(exports, '__esModule', { value: true });
1454
+
1455
+ }));
1456
+ //# sourceMappingURL=index.dev.js.map