@creejs/commons-logging 1.0.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 ADDED
@@ -0,0 +1,291 @@
1
+ # @creejs/commons-logging
2
+ A Common Logging Library:
3
+
4
+ - **light-weight, No 3rd Dependencies**
5
+
6
+ Obey style of commons-logging, Output logs to Console
7
+
8
+ - **Log4js supported**
9
+
10
+ Work with log4js smoothly, No Changes to existed codes
11
+
12
+ - **use Property to check LogLevel**
13
+
14
+ - properties like: logger.errorEnabled, logger.traceEnabled, ...
15
+ - Also Support: logger.isErrorEnabled(), logger.isTraceEnabled(), ...
16
+
17
+ - **Extensible via Provider mechanism**
18
+
19
+ Easy to support more Logging Libraries via adding new Providers
20
+
21
+
22
+
23
+ ## Install
24
+
25
+ ```shell
26
+ npm intall @creejs/commons-logging
27
+ ```
28
+
29
+
30
+
31
+ ## Usage
32
+
33
+ The short examples demostrate some basic usages:
34
+
35
+ - ##### Embbed Console-Logging
36
+
37
+ ```javascript
38
+ const { getLogger } = require('@creejs/commons-logging')
39
+
40
+ // get or create Logger instance with default level: error
41
+ const logger = getLogger('logger1')
42
+
43
+ // logging, use property to check level
44
+ logger.errorEnabled && logger.error('This a', 'test string')
45
+ // 2025-07-14T09:28:30.442Z logger1 [Debug] This a test string
46
+
47
+ // logging, use method to check level
48
+ logger.isErrorEnabled() && logger.error('This a', 'test string')
49
+ // 2025-07-14T09:28:30.445Z logger1 [Debug] This a test string
50
+ ```
51
+
52
+ - ##### Work with Log4js
53
+
54
+ ````javascript
55
+ const { ProviderType, configureThenUse, getLogger } = require('@creejs/commons-logging')
56
+ const Log4js = require('log4js')
57
+
58
+ // inject Log4js with default setting: log to Console with Error level
59
+ configureThenUse(ProviderType.Log4js, Log4js)
60
+
61
+ // get or create Logger instance
62
+ const logger = getLogger('logger1')
63
+
64
+ // logging
65
+ logger.errorEnabled && logger.error('This a', 'test string')
66
+ // 2025-07-14T09:43:21.508Z logger1 [Error] This a test string
67
+
68
+ logger.isFatalEnabled() && logger.fatal('Another', 'message')
69
+ // 2025-07-14T09:43:21.511Z logger1 [Fatal] Another message
70
+ ````
71
+
72
+ #### Work with Log4js, use customized settings
73
+
74
+ ```javascript
75
+ const { ProviderType, configure, use, getLogger } = require('@creejs/commons-logging')
76
+ const Log4js = require('log4js')
77
+
78
+ const setting = { // log4js 6.x syntax
79
+ appenders: {
80
+ out: { type: 'console' }
81
+ },
82
+ categories: {
83
+ default: { appenders: ['out'], level: 'info' }
84
+ }
85
+ }
86
+ // inject Log4js with default setting: log to Console with Error level
87
+ configure(ProviderType.Log4js, Log4js, setting)
88
+ // use log4js as Current Log Provider
89
+ use(ProviderType.Log4js)
90
+
91
+ // get or create Logger instance
92
+ const logger = getLogger('logger1')
93
+
94
+ // logging
95
+ logger.errorEnabled && logger.error('log4js error string')
96
+ // [2025-07-14T19:37:45.308] [ERROR] logger1 - log4js error string
97
+
98
+ logger.isInfoEnabled() && logger.info('log4js info string')
99
+ // [2025-07-14T19:37:45.312] [INFO] logger1 - log4js info string
100
+ ```
101
+
102
+
103
+
104
+ ## Add New Provider
105
+
106
+ See the Example under **/examples/new-provider**
107
+
108
+ Add a new Provider to support new Logging Libraries, the limited steps should be following:
109
+
110
+ - Implement the **Provider** Interface
111
+ - Implement the **LogFactory** abstract class
112
+ - Implement the **Logger** abstract class
113
+ - Export a Provider Instance
114
+ - Add Provider
115
+ - Configure Provider
116
+ - Use Provider
117
+
118
+ ##### Implement the **Provider** Interface
119
+
120
+ The Provider Class:
121
+
122
+ ```javascript
123
+ class Provider {
124
+ /**
125
+ * @return {String} The type of the provider.
126
+ */
127
+ getType () {
128
+ throw new Error('Not Impled Yet')
129
+ }
130
+
131
+ /**
132
+ * Create a new LogFactory instance
133
+ * @param {*} [nativeLib] - eg. log4js
134
+ * @param {*} [setting] - eg. log4js' Setting JSON
135
+ * @returns {LogFactory} A new instance of LogFactory.
136
+ */
137
+ createLogFactory (nativeLib, setting) {
138
+ throw new Error('Not Impled Yet')
139
+ }
140
+ }
141
+ ```
142
+
143
+
144
+
145
+ ##### Implement the **LogFactory** abstract class
146
+
147
+ ```javascript
148
+ class LogFactory {
149
+ /**
150
+ * Initializes the logging provider.
151
+ * 1. Do nothing in the default implementation.
152
+ * 2. Override this method to initialize the provider.
153
+ * @returns {Promise<void>|void}
154
+ */
155
+ init () {
156
+ // do nothing
157
+ }
158
+
159
+ /**
160
+ * Update factory's Log Level
161
+ * 1. Only Provider knows how to update
162
+ * * update level in "setting", so the new created Logger will use the new level
163
+ * 2. called when users want to change global log level via CommonsLogging.setLevel()
164
+ * @param {number} level - The log level to set, see {@link LogLevel.Level}
165
+ * @returns {void}
166
+ * @abstract
167
+ */
168
+ setLevel (level) {
169
+ throw new Error('Not Impled Yet')
170
+ }
171
+
172
+ /**
173
+ * Creates a new logger named with the "loggerName"
174
+ * @param {string} loggerName - The name to associate with the logger instance.
175
+ * @throws {Error} Throws an error indicating the method is Not Impled Yet yet.
176
+ * @returns {Logger} A new logger intance
177
+ * @abstract
178
+ */
179
+ createLogger (loggerName) {
180
+ throw new Error('Not Impled Yet')
181
+ }
182
+ }
183
+ ```
184
+
185
+
186
+
187
+ ##### Implement the Logger abstract class
188
+
189
+ ```javascript
190
+ class Logger {
191
+ /**
192
+ * Sets the logging level
193
+ * @param {number} level
194
+ * @throws {Error} Always throws "Not Impled Yet Yet" error.
195
+ * @protected
196
+ * @abstract
197
+ */
198
+ _setLevel (level) {
199
+ throw new Error('Not Impled Yet')
200
+ }
201
+
202
+ /**
203
+ * Override this method to implement fatal logging.
204
+ * @protected
205
+ * @param {...*} args - Variable arguments
206
+ * @throws {Error} Always throws "Not Impled Yet Yet" error
207
+ */
208
+ _fatal (...args) {
209
+ throw new Error('Not Impled Yet')
210
+ }
211
+
212
+ /**
213
+ * Override this method to implement error logging.
214
+ * @protected
215
+ * @param {...*} args - Variable arguments
216
+ * @throws {Error} Always throws "Not Impled Yet Yet" error
217
+ */
218
+ _error (...args) {
219
+ throw new Error('Not Impled Yet')
220
+ }
221
+
222
+ /**
223
+ * Override this method to implement warn logging.
224
+ * @protected
225
+ * @param {...*} args - Variable arguments
226
+ * @throws {Error} Always throws "Not Impled Yet Yet" error
227
+ */
228
+ _warn (...args) {
229
+ throw new Error('Not Impled Yet')
230
+ }
231
+
232
+ /**
233
+ * Override this method to implement debug logging.
234
+ * @protected
235
+ * @param {...*} args - Variable arguments
236
+ * @throws {Error} Always throws "Not Impled Yet Yet" error
237
+ */
238
+ _debug (...args) {
239
+ throw new Error('Not Impled Yet')
240
+ }
241
+
242
+ /**
243
+ * Override this method to implement info logging.
244
+ * @protected
245
+ * @param {...*} args - Variable arguments
246
+ * @throws {Error} Always throws "Not Impled Yet Yet" error
247
+ */
248
+ _info (...args) {
249
+ throw new Error('Not Impled Yet')
250
+ }
251
+
252
+ /**
253
+ * Override this method to implement trace logging.
254
+ * @protected
255
+ * @param {...*} args - Variable arguments
256
+ * @throws {Error} Always throws "Not Impled Yet Yet" error
257
+ */
258
+ _trace (...args) {
259
+ throw new Error('Not Impled Yet')
260
+ }
261
+ }
262
+ ```
263
+
264
+
265
+
266
+ ##### Export a Provider Instance
267
+
268
+ Put your Provider, LogFactory, Logger inside one Folder, and export the **new Provider()** inside index.js
269
+
270
+ ```javascript
271
+ 'user strict'
272
+ const YourProvider = require('./provider')
273
+
274
+ module.exports = new YourProvider()
275
+ ```
276
+
277
+ ##### Add->Configure->Use Provider
278
+
279
+ ```javascript
280
+ const { add, configure, use, getLogger } = require('@creejs/commons-logging')
281
+
282
+ const newProvider = require('YourProviderModule')
283
+
284
+ // add your Provider
285
+ add(newProvider)
286
+ // configure your Provider
287
+ configure(newProvider.getType(), ThirdPartLib, yourSetting)
288
+ // set your Provider as Default
289
+ use(newProvider.getType())
290
+ ```
291
+
package/index.js ADDED
@@ -0,0 +1,3 @@
1
+ 'use strict'
2
+
3
+ module.exports = require('./lib')
@@ -0,0 +1,76 @@
1
+ 'use strict'
2
+
3
+ // owned
4
+ // eslint-disable-next-line no-unused-vars
5
+ const Logger = require('../logger')
6
+ // eslint-disable-next-line no-unused-vars
7
+ const { Level, assertLevel } = require('../log-level')
8
+ const LogFactory = require('../log-factory')
9
+ const ConsoleLogger = require('./console-logger')
10
+ const LogConfig = require('../log-config')
11
+
12
+ /**
13
+ * Use Console as the native library
14
+ */
15
+ class ConsoleLogFactory extends LogFactory {
16
+ /**
17
+ * the underlying "Console" Object.
18
+ * @returns {{}}
19
+ */
20
+ get console () {
21
+ return this._libraryModule // it's the embedded "console" object
22
+ }
23
+
24
+ /**
25
+ * Gets the current logging settings
26
+ * @returns {{level:number}} The logging settings object containing the current log level.
27
+ */
28
+ get setting () {
29
+ if (this._setting == null) {
30
+ this._setting = {
31
+ level: LogConfig.currentLevel
32
+ }
33
+ }
34
+ // @ts-ignore
35
+ return this._setting
36
+ }
37
+
38
+ /**
39
+ * Update factory's Log Level
40
+ * 1. Only Provider knows how to update
41
+ * @param {number} level - The log level to set, see {@link LogLevel.Level}
42
+ * @returns {void}
43
+ * @throws {Error} Throws an error as this method is Not Impled Yet.
44
+ * @abstract
45
+ */
46
+ setLevel (level) {
47
+ assertLevel(level)
48
+ if (level !== this.setting.level) {
49
+ this.setting.level = level
50
+ }
51
+ // init again
52
+ this.init()
53
+ }
54
+
55
+ /**
56
+ * Initializes the log4js provider by configuring it with the provided settings.
57
+ * @async
58
+ * @override
59
+ * @returns {Promise<void>|void}
60
+ */
61
+ init () {
62
+ // do nothing
63
+ }
64
+
65
+ /**
66
+ * Creates a new logger instance with the specified name and log level.
67
+ * @param {string} loggerName - The name of the logger to create.
68
+ * @returns {Logger} A new logger instance configured with the given name and level.
69
+ * @override
70
+ */
71
+ createLogger (loggerName) {
72
+ return new ConsoleLogger(loggerName, this.console, this.setting.level)
73
+ }
74
+ }
75
+
76
+ module.exports = ConsoleLogFactory
@@ -0,0 +1,29 @@
1
+ 'use strict'
2
+
3
+ const ProviderType = require('../provider-type')
4
+ const Provider = require('../provider')
5
+ const ConsoleLogFactory = require('./console-log-factory')
6
+
7
+ class ConsoleProvider extends Provider {
8
+ /**
9
+ * Gets the provider type (Console).
10
+ * @returns {string} "CONSOLE"
11
+ * @override
12
+ */
13
+ getType () {
14
+ return ProviderType.Console
15
+ }
16
+
17
+ /**
18
+ * Creates a new Provider instance.
19
+ * @param {Object} libraryModule - The library module to be used.
20
+ * @param {Object} setting - Configuration settings for the provider.
21
+ * @returns {ConsoleLogFactory} A new instance of ConsoleProvider.
22
+ * @override
23
+ */
24
+ createLogFactory (libraryModule, setting) {
25
+ return new ConsoleLogFactory(libraryModule, setting)
26
+ }
27
+ }
28
+
29
+ module.exports = ConsoleProvider
@@ -0,0 +1,88 @@
1
+ 'use strict'
2
+
3
+ // 3rd
4
+ // internal
5
+ // owned
6
+ const Logger = require('../logger')
7
+ // module vars
8
+ /**
9
+ * A Simple Implementation of the Logger interface that logs to the console.
10
+ */
11
+ class ConsoleLogger extends Logger {
12
+ /**
13
+ * Creates a ConsoleLogger instance.
14
+ * @constructor
15
+ * @param {string} name - The logger name.
16
+ * @param {*} nativeLogger - The native console object to use for logging.
17
+ * @param {number} level - The initial log level.
18
+ */
19
+ constructor (name, nativeLogger, level) {
20
+ super(name, nativeLogger, level)
21
+ /**
22
+ * @type {{error:function, warn:function, debug:function, log:function, info:function, trace:function}}
23
+ */
24
+ this.console = nativeLogger
25
+ }
26
+
27
+ /**
28
+ * For ConsoleLogger, Nothing to do
29
+ * @param {number} level
30
+ * @override
31
+ * @protectd
32
+ */
33
+ _setLevel (level) {
34
+ // do nothing
35
+ }
36
+
37
+ /**
38
+ * Logs a fatal error message with timestamp and logger name.
39
+ * Only outputs if fatal logging is enabled for this logger instance.
40
+ * @param {...any} args
41
+ */
42
+ _fatal (...args) {
43
+ this.console.error(new Date().toISOString(), this.name, '[Fatal]', ...args)
44
+ }
45
+
46
+ /**
47
+ * Logs an error message to the console with timestamp and logger name.
48
+ * Only logs if error logging is enabled for this logger instance.
49
+ * @param {...any} args
50
+ */
51
+ _error (...args) {
52
+ this.console.error(new Date().toISOString(), this.name, '[Error]', ...args)
53
+ }
54
+
55
+ /**
56
+ * Logs a warning message to the console if warn logging is enabled.
57
+ * @param {...any} args
58
+ */
59
+ _warn (...args) {
60
+ this.console.warn(new Date().toISOString(), this.name, '[Warn]', ...args)
61
+ }
62
+
63
+ /**
64
+ * Logs debug messages to console if debug mode is enabled.
65
+ * @param {...any} args
66
+ */
67
+ _debug (...args) {
68
+ this.console.debug(new Date().toISOString(), this.name, '[Debug]', ...args)
69
+ }
70
+
71
+ /**
72
+ * Logs an info message to the console with timestamp and logger name.
73
+ * @param {...any} args
74
+ */
75
+ _info (...args) {
76
+ this.console.log(new Date().toISOString(), this.name, '[Info]', ...args)
77
+ }
78
+
79
+ /**
80
+ * Logs a trace message with timestamp and logger name if trace logging is enabled.
81
+ * @param {...any} args
82
+ */
83
+ _trace (...args) {
84
+ this.console.log(new Date().toISOString(), this.name, '[Trace]', ...args)
85
+ }
86
+ }
87
+
88
+ module.exports = ConsoleLogger
@@ -0,0 +1,11 @@
1
+ 'use strict'
2
+
3
+ // internal
4
+
5
+ // owned
6
+ const ConsoleProvider = require('./console-log-provider')
7
+
8
+ // module vars
9
+ const provider = new ConsoleProvider()
10
+
11
+ module.exports = provider