@creejs/commons-logging 1.0.8 → 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.
package/lib/index.js DELETED
@@ -1,286 +0,0 @@
1
- /**
2
- * @module CommonsLogging
3
- * @description Common logging library
4
- *
5
- * Follow the sequence to init log system: addProvider() -> use() -> configure() -> getLogger()
6
- * 1. Add ability to handle the type of library
7
- * * eg. after adding Log4jsProvider, we can use Log4js library
8
- * 2. But we MAY NOT use it now.
9
- * * call useProvider(typeName) to select which kind of LogProvider Implementation to use.
10
- * * call configure(typeName, nativeLib, setting) to LogProvider Implementation
11
- */
12
- // 3rd
13
- // internal
14
- import { TypeAssert, TypeUtils } from '@creejs/commons-lang'
15
- // owned
16
- import LogFactory from './log-factory.js'
17
- import Logger from './logger.js'
18
- import ProviderType from './provider-type.js'
19
- import LogLevel from './log-level.js'
20
- import LogConfig from './log-config.js'
21
-
22
- import ConsoleProvider from './console/index.js'
23
- import Log4jsProvider from './log4js/index.js'
24
- import Provider from './provider.js'
25
-
26
- const { assertNotNil, assertString } = TypeAssert
27
- const { isFunction, isNil } = TypeUtils
28
-
29
- /**
30
- * "default" export to support "import CommonsLogging from '@creejs/commons-logging'"
31
- */
32
- export default {
33
- Provider,
34
- LogFactory,
35
- Logger,
36
- LogLevel,
37
- ProviderType,
38
- getLogger,
39
- setLevel,
40
- useProvider,
41
- /**
42
- * alias for {@link CommonsLogging.useProvider}
43
- * @see {@link CommonsLogging.useProvider}
44
- * @function
45
- * @alias module:CommonsLogging.use
46
- */
47
- use: useProvider,
48
- configureProvider,
49
- /**
50
- * @function
51
- * @alias module:CommonsLogging.confiure
52
- */
53
- configure: configureProvider,
54
- configureThenUseProvider,
55
- /**
56
- * @function
57
- * @alias module:CommonsLogging.configureThenUseProvider
58
- */
59
- configureThenUse: configureThenUseProvider,
60
- addProvider,
61
- add: addProvider,
62
- clearProviders,
63
- currentProvider,
64
- /**
65
- * @function
66
- * @alias module:CommonsLogging.current
67
- */
68
- current: currentProvider,
69
- removeProvider,
70
- /**
71
- * @function
72
- * @alias module:CommonsLogging.remove
73
- */
74
- remove: removeProvider,
75
- /**
76
- * @alias module:CommonsLogging.ConsoleProvider
77
- */
78
- ConsoleProvider,
79
- /**
80
- * @alias module:CommonsLogging.Log4jsProvider
81
- */
82
- Log4jsProvider
83
- }
84
- /**
85
- * "named" export to support
86
- * 1. import { getLogger, ... } from '@creejs/commons-logging'
87
- * 2. import * as CommonsLogging from '@creejs/commons-logging'
88
- */
89
- export { Provider }
90
- export { LogFactory }
91
- export { Logger }
92
- export { LogLevel }
93
- export { ProviderType }
94
- export { getLogger }
95
- export { setLevel }
96
- export { useProvider }
97
- export { useProvider as use }
98
- export { configureProvider }
99
- export { configureProvider as configure }
100
- export { configureThenUseProvider }
101
- export { configureThenUseProvider as configureThenUse }
102
- export { addProvider }
103
- export { addProvider as add }
104
- export { clearProviders }
105
- export { currentProvider }
106
- export { currentProvider as current }
107
- export { removeProvider }
108
- export { removeProvider as remove }
109
- export { ConsoleProvider }
110
- export { Log4jsProvider }
111
-
112
- // module vars
113
-
114
- /**
115
- * Store Created Loggers, indexed with Names
116
- * @type {Map<string, Logger>}
117
- * @private
118
- */
119
- const name2Logger = new Map()
120
-
121
- /**
122
- * set Global logging level
123
- * @param {'TRACE'|'DEBUG'|'INFO'|'WARN'|'ERROR'|'FATAL'|'OFF'|'trace'|'debug'|'info'|'warn'|'error'|'fatal'|'off'} level - The log level
124
- */
125
- function setLevel (level) {
126
- assertString(level)
127
- const upperLevel = level.toUpperCase()
128
- const levelNumber = LogLevel.name2Value(upperLevel)
129
- if (levelNumber == null) {
130
- throw new Error(`Invalid log level: ${level}`)
131
- }
132
- if (levelNumber === LogConfig.currentLevel) {
133
- return // no change
134
- }
135
- LogConfig.currentLevel = levelNumber
136
-
137
- // refresh existed factories
138
- // @ts-ignore
139
- // eslint-disable-next-line no-unused-vars
140
- for (const [typeName, factory] of LogConfig.listFactories()) {
141
- factory.setLevel(levelNumber)
142
- }
143
- // refresh existed Loggers
144
- for (const logger of name2Logger.values()) {
145
- if (logger.level !== levelNumber) {
146
- logger.setLevel(levelNumber)
147
- }
148
- }
149
- }
150
-
151
- function currentProvider () {
152
- return LogConfig.currentProvider
153
- }
154
-
155
- /**
156
- * Set the provider using currently
157
- * @param {string} typeName - The type name of the logging provider to use.
158
- * @returns {void}
159
- * @throws {Error} If the provider name is unknown.
160
- */
161
- function useProvider (typeName) {
162
- assertString(typeName)
163
- typeName = typeName.toUpperCase()
164
- const provider = LogConfig.getProvider(typeName)
165
- if (provider == null) {
166
- throw new Error(`No Provider Named with: ${typeName}`)
167
- }
168
- LogConfig.currentProvider = typeName
169
- }
170
-
171
- /**
172
- * Removes and returns the provider associated with the given type name.
173
- * If no provider exists for the type name, the function returns undefined.
174
- *
175
- * @param {string} typeName - The type name of the provider to remove.
176
- * @returns {boolean} The removed provider, or undefined if not found.
177
- */
178
- function removeProvider (typeName) {
179
- if (typeName == null) {
180
- return false
181
- }
182
- assertString(typeName)
183
- typeName = typeName.toUpperCase()
184
- return LogConfig.removeProvider(typeName)
185
- }
186
-
187
- /**
188
- * Add a type of Provider
189
- *
190
- * More:
191
- * 1. A Provider is a Module
192
- * 2. The module must include the following functions:
193
- * 1. getType() - Returns the type name of the provider.
194
- * 2. createLogFactory() - Creates a new LogFactory instance.
195
- * @param {Provider} provider - Logging Library Module
196
- * @returns {void}
197
- */
198
- function addProvider (provider) {
199
- assertNotNil(provider)
200
- const { getType, createLogFactory } = provider
201
- if (!isFunction(getType) || !isFunction(createLogFactory)) {
202
- throw new Error('Invalid Provider Module, missing getType(), createLogFactory() functions')
203
- }
204
- let typeName = provider.getType()
205
- assertString(typeName)
206
- typeName = typeName.toUpperCase()
207
- LogConfig.addProvider(typeName, provider)
208
- // set current provider if not set yet
209
- if (isNil(currentProvider())) {
210
- useProvider(typeName)
211
- }
212
- }
213
-
214
- function clearProviders () {
215
- name2Logger.clear()
216
- LogConfig.clear()
217
- }
218
-
219
- /**
220
- * configure provider to initialize its LogFactory
221
- * 1. find the LogProvider Implementation of "typeName"
222
- * * if type is not supported, throw error
223
- * 2. use the nativeLib and setting to initialize the LogProvider
224
- * 3. create a LogFactory via teh LogProvider
225
- * @param {string} typeName - The type of logging provider to configure.
226
- * @param {*} [nativeLib] - The native library to use for logging.
227
- * @param {*} [setting] - Configuration settings for the logging provider.
228
- * @throws {Error} If the typeName is not recognized.
229
- */
230
- function configureProvider (typeName, nativeLib, setting) {
231
- assertString(typeName)
232
- typeName = typeName.toUpperCase()
233
- const provider = LogConfig.getProvider(typeName)
234
- if (provider == null) {
235
- throw new Error(`No Provider: ${typeName}`)
236
- }
237
- const factory = provider.createLogFactory(nativeLib, setting)
238
- LogConfig.addFactory(typeName, factory)
239
- }
240
-
241
- /**
242
- * Configures and immediately uses a logging provider with the given settings.
243
- * @param {string} typeName - The type/name identifier for the provider.
244
- * @param {*} nativeLib - The native library implementation to configure.
245
- * @param {*} setting - Configuration settings for the provider.
246
- */
247
- function configureThenUseProvider (typeName, nativeLib, setting) {
248
- configureProvider(typeName, nativeLib, setting)
249
- useProvider(typeName)
250
- }
251
-
252
- /**
253
- * Gets a logger instance for the specified logger name using the current provider.
254
- * @param {string} loggerName - The name of the logger to retrieve.
255
- * @returns {Logger} The logger instance.
256
- * @throws {Error} If no default provider is set or if the current provider is not initialized.
257
- */
258
- function getLogger (loggerName) {
259
- // if logger already exists, return it
260
- let logger = name2Logger.get(loggerName)
261
- if (logger != null) {
262
- return logger
263
- }
264
- // create a new logger via the current provider's LogFactory
265
- const currentTypeName = currentProvider()
266
- if (currentTypeName == null) {
267
- throw new Error('No Default LogProvider, call useProvider(typeName)')
268
- }
269
- const factory = LogConfig.getFactory(currentTypeName)
270
- if (factory == null) {
271
- throw new Error('configureProvider(typeName, nativeLib, settting) before getting logger via Provider')
272
- }
273
- logger = factory.createLogger(loggerName)
274
- name2Logger.set(loggerName, logger)
275
- return logger
276
- }
277
-
278
- function initLogSystem () {
279
- addProvider(Log4jsProvider)
280
- // ConsoleProvider as default impl
281
- addProvider(ConsoleProvider)
282
- configureProvider(ProviderType.Console, console)
283
- useProvider(ProviderType.Console) // Use ConsoleLogger as default
284
- }
285
-
286
- initLogSystem()
package/lib/log-config.js DELETED
@@ -1,182 +0,0 @@
1
- // internal
2
- import { TypeAssert } from '@creejs/commons-lang'
3
- // owned
4
- import { DefaultLevel } from './log-level.js'
5
- // eslint-disable-next-line no-unused-vars
6
- import LogFactory from './log-factory.js'
7
- import Provider from './provider.js'
8
-
9
- const { assertString } = TypeAssert
10
-
11
- /**
12
- * @module LogConfig
13
- * @description Provide Impl of Log Configuration
14
- * @private
15
- */
16
-
17
- /**
18
- * type name of current provider
19
- * @type {string}
20
- * @public
21
- */
22
- // @ts-ignore
23
- // eslint-disable-next-line prefer-const
24
- let currentProvider = null
25
-
26
- /**
27
- * Global logging level
28
- * @type {number}
29
- * @public
30
- */
31
- // @ts-ignore
32
- // eslint-disable-next-line prefer-const
33
- let currentLevel = DefaultLevel
34
-
35
- /**
36
- * The map of registered logging libraries
37
- * @type {Map<string,Provider>}
38
- * @private
39
- */
40
- const type2Provider = new Map()
41
-
42
- /**
43
- * Adds a logging provider for the specified type.
44
- * @param {string} typeName - The type identifier for the provider.
45
- * @param {Provider} provider - The logging provider implementation.
46
- * @returns {void}
47
- * @alias module:LogConfig.addProvider
48
- */
49
- function addProvider (typeName, provider) {
50
- assertString(typeName)
51
- Provider.assertProviderLike(provider)
52
- type2Provider.set(typeName.toUpperCase(), provider)
53
- }
54
-
55
- /**
56
- * Gets the logging provider for the specified type name.
57
- * @param {string} typeName - The type name to look up in the provider map.
58
- * @returns {Provider|undefined} The logging provider instance if found, otherwise undefined.
59
- */
60
- function getProvider (typeName) {
61
- assertString(typeName)
62
- return type2Provider.get(typeName.toUpperCase())
63
- }
64
-
65
- /**
66
- * Removes a logging provider of the specified type.
67
- * @param {string} typeName - The type name of the provider to remove.
68
- * @returns {boolean}
69
- */
70
- function removeProvider (typeName) {
71
- assertString(typeName)
72
- return type2Provider.delete(typeName.toUpperCase())
73
- }
74
-
75
- function clearProviders () {
76
- type2Provider.clear()
77
- }
78
-
79
- /**
80
- * Returns an array of all registered factory types and intances.
81
- * 1. Each entry is a [type, factory] pair
82
- * @returns {Array<{0:string, 1:Provider}>} An array of factory entries.
83
- */
84
- function listProviders () {
85
- return [...type2Provider.entries()]
86
- }
87
-
88
- /**
89
- * Created LogFactories Index with type name
90
- * @type {Map<string, LogFactory>}
91
- * @public
92
- */
93
- const type2Factory = new Map()
94
-
95
- /**
96
- * Registers a log factory for a given type name.
97
- * @param {string} typeName - The name of the log type to register.
98
- * @param {LogFactory} logFactory - Factory function that creates a logger for the specified type.
99
- */
100
- function addFactory (typeName, logFactory) {
101
- assertString(typeName)
102
- LogFactory.assertLogFactoryLike(logFactory)
103
- type2Factory.set(typeName.toUpperCase(), logFactory)
104
- }
105
-
106
- /**
107
- * Removes a factory of the given type from the type-to-factory mapping.
108
- * @param {string} typeName - The name of the type whose factory should be removed.
109
- * @returns {boolean}
110
- */
111
- function removeFactory (typeName) {
112
- assertString(typeName)
113
- return type2Factory.delete(typeName.toUpperCase())
114
- }
115
-
116
- /**
117
- * Gets the factory function associated with the given type name.
118
- * @param {string} typeName - The name of the type to look up.
119
- * @returns {LogFactory|undefined} The factory function for the specified type.
120
- */
121
- function getFactory (typeName) {
122
- assertString(typeName)
123
- return type2Factory.get(typeName.toUpperCase())
124
- }
125
-
126
- /**
127
- * Clears all registered factories from the type2Factory instance.
128
- * This is typically used to reset the factory state during testing or teardown.
129
- */
130
- function clearFactories () {
131
- type2Factory.clear()
132
- }
133
-
134
- /**
135
- * Returns an array of all registered factory types and intances.
136
- * 1. Each entry is a [type, factory] pair
137
- * @returns {Array<{0:string, 1:LogFactory}>} An array of factory entries.
138
- */
139
- function listFactories () {
140
- return [...type2Factory.entries()]
141
- }
142
-
143
- function clear () {
144
- clearProviders()
145
- clearFactories()
146
- }
147
-
148
- export default {
149
- currentProvider,
150
- currentLevel,
151
- type2Provider,
152
- type2Factory,
153
- addProvider,
154
- getProvider,
155
- removeProvider,
156
- clearProviders,
157
- listProviders,
158
- addFactory,
159
- getFactory,
160
- removeFactory,
161
- clearFactories,
162
- listFactories,
163
- clear
164
- }
165
-
166
- export {
167
- currentProvider,
168
- currentLevel,
169
- type2Provider,
170
- type2Factory,
171
- addProvider,
172
- getProvider,
173
- removeProvider,
174
- clearProviders,
175
- listProviders,
176
- addFactory,
177
- getFactory,
178
- removeFactory,
179
- clearFactories,
180
- listFactories,
181
- clear
182
- }
@@ -1,84 +0,0 @@
1
- // owned
2
- // eslint-disable-next-line no-unused-vars
3
- import Logger from './logger.js'
4
-
5
- /**
6
- * @abstract
7
- */
8
- export default class LogFactory {
9
- /**
10
- * Checks if a value resembles a LogFactory by verifying it has required methods.
11
- * @param {*} value - The value to check
12
- * @returns {boolean}
13
- */
14
- static isLogFactoryLike (value) {
15
- if (value == null) {
16
- return false
17
- }
18
- return typeof value === 'object' && typeof value.createLogger === 'function' && typeof value.setLevel === 'function'
19
- }
20
-
21
- /**
22
- * Asserts that the given value is a valid LogFactory-Like object.
23
- * @throws {Error} Throws an error if the value is not LogFactory-Like
24
- * @param {*} value - The value to check.
25
- */
26
- static assertLogFactoryLike (value) {
27
- if (!this.isLogFactoryLike(value)) {
28
- throw new Error('Not LogFactory')
29
- }
30
- }
31
-
32
- /**
33
- * Creates a new logging provider instance.
34
- * @param {{}} libraryModule - the library module
35
- * @param {{}} setting - Configuration settings for the provider
36
- */
37
- constructor (libraryModule, setting) {
38
- this._libraryModule = libraryModule
39
- this._setting = setting
40
- }
41
-
42
- get libraryModule () {
43
- return this._libraryModule
44
- }
45
-
46
- get setting () {
47
- return this._setting
48
- }
49
-
50
- /**
51
- * Initializes the logging provider.
52
- * 1. Do nothing in the default implementation.
53
- * 2. Override this method to initialize the provider.
54
- * @returns {Promise<void>|void}
55
- */
56
- init () {
57
- // do nothing
58
- }
59
-
60
- /**
61
- * Update factory's Log Level
62
- * 1. Only Provider knows how to update
63
- * * update level in "setting", so the new created Logger will use the new level
64
- * 2. called when users want to change global log level via CommonsLogging.setLevel()
65
- * @param {number} level - The log level to set, see {@link LogLevel.Level}
66
- * @returns {void}
67
- * @throws {Error} Throws an error as this method is Not Impled Yet.
68
- * @abstract
69
- */
70
- setLevel (level) {
71
- throw new Error('Not Impled Yet')
72
- }
73
-
74
- /**
75
- * Creates a new logger named with the "loggerName"
76
- * @param {string} loggerName - The name to associate with the logger instance.
77
- * @throws {Error} Throws an error indicating the method is Not Impled Yet yet.
78
- * @returns {Logger} A new logger intance
79
- * @abstract
80
- */
81
- createLogger (loggerName) {
82
- throw new Error('Not Impled Yet')
83
- }
84
- }