@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 +291 -0
- package/index.js +3 -0
- package/lib/console/console-log-factory.js +76 -0
- package/lib/console/console-log-provider.js +29 -0
- package/lib/console/console-logger.js +88 -0
- package/lib/console/index.js +11 -0
- package/lib/index.js +257 -0
- package/lib/log-config.js +157 -0
- package/lib/log-factory.js +88 -0
- package/lib/log-level.js +163 -0
- package/lib/log4js/index.js +11 -0
- package/lib/log4js/log4js-6x-config.js +12 -0
- package/lib/log4js/log4js-factory.js +90 -0
- package/lib/log4js/log4js-logger.js +111 -0
- package/lib/log4js/log4js-provider.js +35 -0
- package/lib/logger.js +285 -0
- package/lib/provider-type.js +13 -0
- package/lib/provider.js +53 -0
- package/package.json +34 -0
- package/types/console-logger.d.ts +7 -0
- package/types/index.d.ts +22 -0
- package/types/log4js-logger.d.ts +13 -0
- package/types/logger.d.ts +111 -0
- package/types/logging-level.d.ts +41 -0
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,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
|