node-ansi-logger 3.1.0 → 3.2.0-dev-20260202-7156835
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/CHANGELOG.md +71 -0
- package/README.md +10 -7
- package/dist/logger.d.ts +431 -0
- package/dist/logger.d.ts.map +1 -0
- package/dist/logger.js +592 -190
- package/dist/logger.js.map +1 -0
- package/dist/module.d.ts +3 -0
- package/dist/module.d.ts.map +1 -0
- package/dist/{index.js → module.js} +1 -0
- package/dist/module.js.map +1 -0
- package/dist/stringify.d.ts +76 -0
- package/dist/stringify.d.ts.map +1 -0
- package/dist/stringify.js +76 -0
- package/dist/stringify.js.map +1 -0
- package/npm-shrinkwrap.json +3 -3
- package/package.json +13 -7
- package/.localignore +0 -3
- package/bmc-button.svg +0 -22
- package/matterbridge.svg +0 -50
package/dist/logger.js
CHANGED
|
@@ -1,7 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* This file contains the AnsiLogger .
|
|
3
|
+
*
|
|
4
|
+
* @file logger.ts
|
|
5
|
+
* @author Luca Liguori
|
|
6
|
+
* @created 2023-06-01
|
|
7
|
+
* @version 3.0.2
|
|
8
|
+
* @license Apache-2.0
|
|
9
|
+
*
|
|
10
|
+
* Copyright 2024, 2025, 2026 Luca Liguori.
|
|
11
|
+
*
|
|
12
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
13
|
+
* you may not use this file except in compliance with the License.
|
|
14
|
+
* You may obtain a copy of the License at
|
|
15
|
+
*
|
|
16
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
17
|
+
*
|
|
18
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
19
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
20
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
21
|
+
* See the License for the specific language governing permissions and
|
|
22
|
+
* limitations under the License.
|
|
23
|
+
*/
|
|
24
|
+
/* eslint-disable no-console */
|
|
25
|
+
/* eslint-disable jsdoc/reject-any-type */
|
|
26
|
+
// Node.js built-in modules
|
|
1
27
|
import path from 'node:path';
|
|
2
28
|
import * as fs from 'node:fs';
|
|
3
29
|
import * as os from 'node:os';
|
|
4
30
|
import { stringify } from './stringify.js';
|
|
31
|
+
// ANSI color codes and styles are defined here for use in the logger
|
|
5
32
|
export const RESET = '[40;0m';
|
|
6
33
|
export const BRIGHT = '[1m';
|
|
7
34
|
export const DIM = '[2m';
|
|
@@ -26,23 +53,28 @@ export const CYAN = '[36m';
|
|
|
26
53
|
export const LIGHT_GREY = '[37m';
|
|
27
54
|
export const GREY = '[90m';
|
|
28
55
|
export const WHITE = '[97m';
|
|
29
|
-
|
|
30
|
-
export const
|
|
31
|
-
export const
|
|
32
|
-
export const
|
|
33
|
-
export const
|
|
34
|
-
export const
|
|
35
|
-
export const
|
|
36
|
-
export const
|
|
37
|
-
export const
|
|
38
|
-
|
|
39
|
-
export const
|
|
40
|
-
export const
|
|
41
|
-
export const
|
|
42
|
-
export const
|
|
43
|
-
export const
|
|
44
|
-
export const
|
|
45
|
-
export const
|
|
56
|
+
// ANSI color codes short form to use in the logger
|
|
57
|
+
export const db = '[38;5;245m'; // Debug 247
|
|
58
|
+
export const nf = '[38;5;252m'; // Info 255
|
|
59
|
+
export const nt = '[38;5;2m'; // Notice
|
|
60
|
+
export const wr = '[38;5;220m'; // Warn 220
|
|
61
|
+
export const er = '[38;5;1m'; // Error
|
|
62
|
+
export const ft = '[38;5;9m'; // Fatal
|
|
63
|
+
export const rs = '[40;0m'; // Reset colors to default foreground and background
|
|
64
|
+
export const rk = '[K'; // Erase from cursor
|
|
65
|
+
// Used internally by plugins
|
|
66
|
+
export const dn = '[38;5;33m'; // Display name device
|
|
67
|
+
export const gn = '[38;5;35m'; // Display name group
|
|
68
|
+
export const idn = '[48;5;21m[38;5;255m'; // Inverted display name device
|
|
69
|
+
export const ign = '[48;5;22m[38;5;255m'; // Inverted display name group
|
|
70
|
+
export const zb = '[38;5;207m'; // Zigbee
|
|
71
|
+
export const hk = '[38;5;79m'; // Homekit
|
|
72
|
+
export const pl = '[32m'; // payload
|
|
73
|
+
export const id = '[37;44m'; // id or ieee_address or UUID
|
|
74
|
+
export const or = '[38;5;208m'; // history
|
|
75
|
+
/**
|
|
76
|
+
* LogLevel enumeration to specify the logging level.
|
|
77
|
+
*/
|
|
46
78
|
export var LogLevel;
|
|
47
79
|
(function (LogLevel) {
|
|
48
80
|
LogLevel["NONE"] = "";
|
|
@@ -53,6 +85,9 @@ export var LogLevel;
|
|
|
53
85
|
LogLevel["ERROR"] = "error";
|
|
54
86
|
LogLevel["FATAL"] = "fatal";
|
|
55
87
|
})(LogLevel || (LogLevel = {}));
|
|
88
|
+
/**
|
|
89
|
+
* TimestampFormat enumeration to specify the format of timestamps in log messages.
|
|
90
|
+
*/
|
|
56
91
|
export var TimestampFormat;
|
|
57
92
|
(function (TimestampFormat) {
|
|
58
93
|
TimestampFormat[TimestampFormat["ISO"] = 0] = "ISO";
|
|
@@ -63,6 +98,7 @@ export var TimestampFormat;
|
|
|
63
98
|
TimestampFormat[TimestampFormat["HOMEBRIDGE"] = 5] = "HOMEBRIDGE";
|
|
64
99
|
TimestampFormat[TimestampFormat["CUSTOM"] = 6] = "CUSTOM";
|
|
65
100
|
})(TimestampFormat || (TimestampFormat = {}));
|
|
101
|
+
// Initialize the global variables
|
|
66
102
|
if (typeof globalThis.__AnsiLoggerCallback__ === 'undefined')
|
|
67
103
|
globalThis.__AnsiLoggerCallback__ = undefined;
|
|
68
104
|
if (typeof globalThis.__AnsiLoggerCallbackLoglevel__ === 'undefined')
|
|
@@ -73,128 +109,293 @@ if (typeof globalThis.__AnsiLoggerFileLoglevel__ === 'undefined')
|
|
|
73
109
|
globalThis.__AnsiLoggerFileLoglevel__ = undefined;
|
|
74
110
|
if (typeof globalThis.__AnsiLoggerFileLogSize__ === 'undefined')
|
|
75
111
|
globalThis.__AnsiLoggerFileLogSize__ = undefined;
|
|
112
|
+
/**
|
|
113
|
+
* AnsiLogger provides a customizable logging utility with ANSI color support.
|
|
114
|
+
* It allows for various configurations such as enabling debug logs, customizing log name, and more.
|
|
115
|
+
*/
|
|
76
116
|
export class AnsiLogger {
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
logStartTime;
|
|
89
|
-
callback = undefined;
|
|
117
|
+
#extLog;
|
|
118
|
+
#logName;
|
|
119
|
+
#logFilePath;
|
|
120
|
+
#logFileSize;
|
|
121
|
+
#logLevel;
|
|
122
|
+
#logWithColors;
|
|
123
|
+
#logTimestampFormat;
|
|
124
|
+
#logCustomTimestampFormat;
|
|
125
|
+
#logTimeStampColor;
|
|
126
|
+
#logNameColor;
|
|
127
|
+
#maxFileSize;
|
|
128
|
+
#logStartTime;
|
|
129
|
+
#callback = undefined;
|
|
130
|
+
/**
|
|
131
|
+
* Constructs a new AnsiLogger instance with optional configuration parameters.
|
|
132
|
+
*
|
|
133
|
+
* @param {AnsiLoggerParams} params - Configuration options for the logger.
|
|
134
|
+
*/
|
|
90
135
|
constructor(params) {
|
|
91
|
-
this
|
|
92
|
-
this
|
|
93
|
-
this
|
|
94
|
-
this
|
|
95
|
-
this
|
|
96
|
-
this
|
|
97
|
-
|
|
98
|
-
|
|
136
|
+
this.#extLog = params.extLog;
|
|
137
|
+
this.#logName = params.logName ?? 'NodeAnsiLogger';
|
|
138
|
+
this.#logNameColor = params.logNameColor ?? '[38;5;31m';
|
|
139
|
+
this.#logLevel = params.logLevel ?? (params.logDebug === true ? "debug" /* LogLevel.DEBUG */ : "info" /* LogLevel.INFO */);
|
|
140
|
+
this.#logWithColors = params.logWithColors !== undefined ? params.logWithColors : process.env.NO_COLOR === '1' ? false : true;
|
|
141
|
+
this.#logTimestampFormat =
|
|
142
|
+
params.logTimestampFormat !== undefined
|
|
143
|
+
? params.logTimestampFormat
|
|
144
|
+
: process.env.NODE_ANSI_LOGGER_TIMESTAMP_FORMAT !== undefined && ['0', '1', '2', '3', '4', '5', '6'].includes(process.env.NODE_ANSI_LOGGER_TIMESTAMP_FORMAT)
|
|
145
|
+
? Number(process.env.NODE_ANSI_LOGGER_TIMESTAMP_FORMAT)
|
|
146
|
+
: 3 /* TimestampFormat.LOCAL_DATE_TIME */;
|
|
147
|
+
this.#logTimeStampColor = params.logTimeStampColor ?? '[38;5;245m';
|
|
148
|
+
this.#logCustomTimestampFormat =
|
|
149
|
+
params.logCustomTimestampFormat !== undefined && typeof params.logCustomTimestampFormat === 'string'
|
|
150
|
+
? params.logCustomTimestampFormat
|
|
151
|
+
: (process.env.NODE_ANSI_LOGGER_TIMESTAMP_CUSTOM_FORMAT ?? 'yyyy-MM-dd HH:mm:ss');
|
|
152
|
+
this.#maxFileSize = params.maxFileSize ?? 100_000_000; // Default 100 MB
|
|
153
|
+
this.#maxFileSize = Math.max(Math.min(this.#maxFileSize, 500_000_000), 1_000_000); // Min 1MB, Max 500MB
|
|
154
|
+
this.#logStartTime = 0;
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* Gets the name of the logger.
|
|
158
|
+
*
|
|
159
|
+
* @returns {string} The logger name.
|
|
160
|
+
*/
|
|
99
161
|
get logName() {
|
|
100
|
-
return this
|
|
162
|
+
return this.#logName;
|
|
101
163
|
}
|
|
164
|
+
/**
|
|
165
|
+
* Sets the log name for the logger.
|
|
166
|
+
*
|
|
167
|
+
* @param {string} name - The logger name to set.
|
|
168
|
+
*/
|
|
102
169
|
set logName(name) {
|
|
103
|
-
this
|
|
170
|
+
this.#logName = name;
|
|
104
171
|
}
|
|
172
|
+
/**
|
|
173
|
+
* Gets the log level of the logger.
|
|
174
|
+
*
|
|
175
|
+
* @returns {LogLevel} The log level.
|
|
176
|
+
*/
|
|
105
177
|
get logLevel() {
|
|
106
|
-
return this
|
|
178
|
+
return this.#logLevel;
|
|
107
179
|
}
|
|
180
|
+
/**
|
|
181
|
+
* Sets the log level for the logger.
|
|
182
|
+
*
|
|
183
|
+
* @param {LogLevel} logLevel - The log level to set.
|
|
184
|
+
*/
|
|
108
185
|
set logLevel(logLevel) {
|
|
109
|
-
this
|
|
186
|
+
this.#logLevel = logLevel;
|
|
110
187
|
}
|
|
188
|
+
/**
|
|
189
|
+
* Gets the logWithColors flag of the logger.
|
|
190
|
+
*
|
|
191
|
+
* @returns {boolean} The logWithColors parameter.
|
|
192
|
+
*/
|
|
111
193
|
get logWithColors() {
|
|
112
|
-
return this
|
|
194
|
+
return this.#logWithColors;
|
|
113
195
|
}
|
|
196
|
+
/**
|
|
197
|
+
* Sets the logWithColors flag of the logger.
|
|
198
|
+
*
|
|
199
|
+
* @param {boolean} logWithColors - The logWithColors parameter to set.
|
|
200
|
+
*/
|
|
114
201
|
set logWithColors(logWithColors) {
|
|
115
|
-
this
|
|
202
|
+
this.#logWithColors = logWithColors;
|
|
203
|
+
}
|
|
204
|
+
/**
|
|
205
|
+
* Gets the log name color string of the logger.
|
|
206
|
+
*
|
|
207
|
+
* @returns {string} The log name color string.
|
|
208
|
+
*/
|
|
209
|
+
get logTimeStampColor() {
|
|
210
|
+
return this.#logTimeStampColor;
|
|
211
|
+
}
|
|
212
|
+
/**
|
|
213
|
+
* Sets the log name color string for the logger.
|
|
214
|
+
*
|
|
215
|
+
* @param {string} color - The logger name color string to set.
|
|
216
|
+
*/
|
|
217
|
+
set logTimeStampColor(color) {
|
|
218
|
+
this.#logTimeStampColor = color;
|
|
219
|
+
}
|
|
220
|
+
/**
|
|
221
|
+
* Gets the log timestamp format of the logger.
|
|
222
|
+
*
|
|
223
|
+
* @returns {TimestampFormat} The log timestamp format.
|
|
224
|
+
*/
|
|
225
|
+
get logTimestampFormat() {
|
|
226
|
+
return this.#logTimestampFormat;
|
|
227
|
+
}
|
|
228
|
+
/**
|
|
229
|
+
* Sets the log timestamp format for the logger.
|
|
230
|
+
*
|
|
231
|
+
* @param {TimestampFormat} logTimestampFormat - The log timestamp format to set.
|
|
232
|
+
*/
|
|
233
|
+
set logTimestampFormat(logTimestampFormat) {
|
|
234
|
+
this.#logTimestampFormat = logTimestampFormat;
|
|
116
235
|
}
|
|
236
|
+
/**
|
|
237
|
+
* Gets the log name color string of the logger.
|
|
238
|
+
*
|
|
239
|
+
* @returns {string} The log name color string.
|
|
240
|
+
*/
|
|
117
241
|
get logNameColor() {
|
|
118
|
-
return this
|
|
242
|
+
return this.#logNameColor;
|
|
119
243
|
}
|
|
244
|
+
/**
|
|
245
|
+
* Sets the log name color string for the logger.
|
|
246
|
+
*
|
|
247
|
+
* @param {string} color - The logger name color string to set.
|
|
248
|
+
*/
|
|
120
249
|
set logNameColor(color) {
|
|
121
|
-
this
|
|
122
|
-
}
|
|
123
|
-
get logTimestampFormat() {
|
|
124
|
-
return this._logTimestampFormat;
|
|
125
|
-
}
|
|
126
|
-
set logTimestampFormat(logTimestampFormat) {
|
|
127
|
-
this._logTimestampFormat = logTimestampFormat;
|
|
250
|
+
this.#logNameColor = color;
|
|
128
251
|
}
|
|
252
|
+
/**
|
|
253
|
+
* Gets the custom log timestamp format of the logger.
|
|
254
|
+
*
|
|
255
|
+
* @returns {string} The custom log timestamp format.
|
|
256
|
+
*/
|
|
129
257
|
get logCustomTimestampFormat() {
|
|
130
|
-
return this
|
|
258
|
+
return this.#logCustomTimestampFormat;
|
|
131
259
|
}
|
|
260
|
+
/**
|
|
261
|
+
* Sets the custom log timestamp format for the logger.
|
|
262
|
+
*
|
|
263
|
+
* @param {string} logCustomTimestampFormat - The custom log timestamp format to set.
|
|
264
|
+
*/
|
|
132
265
|
set logCustomTimestampFormat(logCustomTimestampFormat) {
|
|
133
|
-
this
|
|
266
|
+
this.#logCustomTimestampFormat = logCustomTimestampFormat;
|
|
134
267
|
}
|
|
268
|
+
/**
|
|
269
|
+
* Gets the file path of the log.
|
|
270
|
+
*
|
|
271
|
+
* @returns {string | undefined} The file path of the log, or undefined if not set.
|
|
272
|
+
*/
|
|
135
273
|
get logFilePath() {
|
|
136
|
-
return this
|
|
274
|
+
return this.#logFilePath;
|
|
137
275
|
}
|
|
276
|
+
/**
|
|
277
|
+
* Sets the file path for logging.
|
|
278
|
+
*
|
|
279
|
+
* @param {string | undefined} filePath - The file path to set for logging.
|
|
280
|
+
*/
|
|
138
281
|
set logFilePath(filePath) {
|
|
139
282
|
if (filePath && typeof filePath === 'string' && filePath !== '') {
|
|
283
|
+
// Convert relative path to absolute path
|
|
140
284
|
try {
|
|
141
|
-
this
|
|
285
|
+
this.#logFilePath = path.resolve(filePath);
|
|
142
286
|
}
|
|
143
287
|
catch (error) {
|
|
144
288
|
console.error(`Error resolving log file path ${CYAN}${filePath}${er}: ${error}`);
|
|
145
|
-
this
|
|
146
|
-
this
|
|
289
|
+
this.#logFilePath = undefined;
|
|
290
|
+
this.#logFileSize = undefined;
|
|
147
291
|
return;
|
|
148
292
|
}
|
|
149
|
-
if
|
|
293
|
+
// Check if the file exists and unlink
|
|
294
|
+
if (this.#logFilePath && fs.existsSync(this.#logFilePath)) {
|
|
150
295
|
try {
|
|
151
|
-
fs.unlinkSync(this
|
|
296
|
+
fs.unlinkSync(this.#logFilePath);
|
|
152
297
|
}
|
|
153
298
|
catch (error) {
|
|
154
|
-
console.error(`${er}Error unlinking the log file ${CYAN}${this
|
|
155
|
-
this
|
|
156
|
-
this
|
|
299
|
+
console.error(`${er}Error unlinking the log file ${CYAN}${this.#logFilePath}${er}: ${error}`);
|
|
300
|
+
this.#logFilePath = undefined;
|
|
301
|
+
this.#logFileSize = undefined;
|
|
157
302
|
return;
|
|
158
303
|
}
|
|
159
304
|
}
|
|
160
|
-
this
|
|
305
|
+
this.#logFileSize = 0;
|
|
161
306
|
}
|
|
162
307
|
else {
|
|
163
|
-
this
|
|
164
|
-
this
|
|
308
|
+
this.#logFilePath = undefined;
|
|
309
|
+
this.#logFileSize = undefined;
|
|
165
310
|
}
|
|
166
311
|
}
|
|
312
|
+
/**
|
|
313
|
+
* Gets the size of log file.
|
|
314
|
+
*
|
|
315
|
+
* @returns {number | undefined} The size of log file, or undefined if not set.
|
|
316
|
+
*/
|
|
167
317
|
get logFileSize() {
|
|
168
|
-
return this
|
|
318
|
+
return this.#logFilePath && this.#logFileSize ? this.#logFileSize : undefined;
|
|
169
319
|
}
|
|
320
|
+
/**
|
|
321
|
+
* Gets the max file size of the file loggers.
|
|
322
|
+
*
|
|
323
|
+
* @returns {number} The current maxFileSize.
|
|
324
|
+
*/
|
|
170
325
|
get maxFileSize() {
|
|
171
|
-
return this
|
|
326
|
+
return this.#maxFileSize;
|
|
172
327
|
}
|
|
328
|
+
/**
|
|
329
|
+
* Sets the max file size of the file loggers.
|
|
330
|
+
*
|
|
331
|
+
* @param {number} maxFileSize - The maxFileSize to set. Minimum is 1MB, Maximum is 500MB.
|
|
332
|
+
*/
|
|
173
333
|
set maxFileSize(maxFileSize) {
|
|
174
|
-
this
|
|
175
|
-
}
|
|
334
|
+
this.#maxFileSize = Math.max(Math.min(maxFileSize, 500_000_000), 1_000_000);
|
|
335
|
+
}
|
|
336
|
+
/**
|
|
337
|
+
* Gets the log start time of the logger.
|
|
338
|
+
*
|
|
339
|
+
* @returns {number} The current log start time.
|
|
340
|
+
*/
|
|
341
|
+
get logStartTime() {
|
|
342
|
+
return this.#logStartTime;
|
|
343
|
+
}
|
|
344
|
+
/**
|
|
345
|
+
* Starts a timer with an optional message.
|
|
346
|
+
*
|
|
347
|
+
* @param {string} message - The message to log when starting the timer.
|
|
348
|
+
*/
|
|
176
349
|
startTimer(message) {
|
|
177
|
-
this
|
|
350
|
+
this.#logStartTime = Date.now();
|
|
178
351
|
this.info(`Timer started ${message}`);
|
|
179
352
|
}
|
|
353
|
+
/**
|
|
354
|
+
* Stops the timer started by startTimer and logs the elapsed time.
|
|
355
|
+
*
|
|
356
|
+
* @param {string} message - The message to log along with the elapsed time.
|
|
357
|
+
*/
|
|
180
358
|
stopTimer(message) {
|
|
181
|
-
if (this
|
|
182
|
-
const timePassed = Date.now() - this
|
|
359
|
+
if (this.#logStartTime !== 0) {
|
|
360
|
+
const timePassed = Date.now() - this.#logStartTime;
|
|
183
361
|
this.info(`Timer stoppped at ${timePassed} ms ${message}`);
|
|
184
362
|
}
|
|
185
|
-
this
|
|
363
|
+
this.#logStartTime = 0;
|
|
186
364
|
}
|
|
365
|
+
/**
|
|
366
|
+
* Sets the callback function to be used by the logger.
|
|
367
|
+
*
|
|
368
|
+
* @param {AnsiLoggerCallback} callback - The callback function.
|
|
369
|
+
*/
|
|
187
370
|
setCallback(callback) {
|
|
188
|
-
this
|
|
371
|
+
this.#callback = callback;
|
|
189
372
|
}
|
|
373
|
+
/**
|
|
374
|
+
* Gets the callback function currently used by the logger.
|
|
375
|
+
*
|
|
376
|
+
* @returns {AnsiLoggerCallback | undefined} The callback function.
|
|
377
|
+
*/
|
|
190
378
|
getCallback() {
|
|
191
|
-
return this
|
|
192
|
-
}
|
|
193
|
-
|
|
379
|
+
return this.#callback;
|
|
380
|
+
}
|
|
381
|
+
/**
|
|
382
|
+
* Sets the global callback function to be used by the logger.
|
|
383
|
+
*
|
|
384
|
+
* @param {AnsiLoggerCallback | undefined} callback - The callback function.
|
|
385
|
+
* @param {LogLevel} [callbackLevel] - The log level of the log file (default LogLevel.DEBUG).
|
|
386
|
+
*
|
|
387
|
+
* @returns {AnsiLoggerCallback | undefined} The path name of the log file.
|
|
388
|
+
*/
|
|
389
|
+
static setGlobalCallback(callback, callbackLevel = "debug" /* LogLevel.DEBUG */) {
|
|
194
390
|
__AnsiLoggerCallback__ = callback;
|
|
195
391
|
__AnsiLoggerCallbackLoglevel__ = callbackLevel;
|
|
196
392
|
return __AnsiLoggerCallback__;
|
|
197
393
|
}
|
|
394
|
+
/**
|
|
395
|
+
* Gets the global callback function currently used by the logger.
|
|
396
|
+
*
|
|
397
|
+
* @returns {AnsiLoggerCallback | undefined} The callback function.
|
|
398
|
+
*/
|
|
198
399
|
static getGlobalCallback() {
|
|
199
400
|
if (__AnsiLoggerCallback__) {
|
|
200
401
|
return __AnsiLoggerCallback__;
|
|
@@ -203,6 +404,11 @@ export class AnsiLogger {
|
|
|
203
404
|
return undefined;
|
|
204
405
|
}
|
|
205
406
|
}
|
|
407
|
+
/**
|
|
408
|
+
* Gets the global callback log level used by the logger.
|
|
409
|
+
*
|
|
410
|
+
* @returns {LogLevel | undefined} The log level of the global callback.
|
|
411
|
+
*/
|
|
206
412
|
static getGlobalCallbackLevel() {
|
|
207
413
|
if (__AnsiLoggerCallbackLoglevel__) {
|
|
208
414
|
return __AnsiLoggerCallbackLoglevel__;
|
|
@@ -211,13 +417,31 @@ export class AnsiLogger {
|
|
|
211
417
|
return undefined;
|
|
212
418
|
}
|
|
213
419
|
}
|
|
214
|
-
|
|
420
|
+
/**
|
|
421
|
+
* Sets the global callback log level for the logger.
|
|
422
|
+
*
|
|
423
|
+
* @param {LogLevel} logLevel - The log level to set. Defaults to LogLevel.DEBUG.
|
|
424
|
+
*
|
|
425
|
+
* @returns {LogLevel | undefined} The log level that was set.
|
|
426
|
+
*/
|
|
427
|
+
static setGlobalCallbackLevel(logLevel = "debug" /* LogLevel.DEBUG */) {
|
|
215
428
|
__AnsiLoggerCallbackLoglevel__ = logLevel;
|
|
216
429
|
return __AnsiLoggerCallbackLoglevel__;
|
|
217
430
|
}
|
|
218
|
-
|
|
431
|
+
/**
|
|
432
|
+
* Sets the global logfile to be used by the logger.
|
|
433
|
+
*
|
|
434
|
+
* @param {string} logfilePath - The path name of the log file.
|
|
435
|
+
* @param {LogLevel} logfileLevel - Optional: the log level of the log file. Default LogLevel.DEBUG.
|
|
436
|
+
* @param {boolean} unlink - Optional: whether to unlink (delete) the log file if it exists. Default false.
|
|
437
|
+
*
|
|
438
|
+
* @returns {string | undefined} The absolute path name of the log file.
|
|
439
|
+
*/
|
|
440
|
+
static setGlobalLogfile(logfilePath, logfileLevel = "debug" /* LogLevel.DEBUG */, unlink = false) {
|
|
219
441
|
if (logfilePath && typeof logfilePath === 'string' && logfilePath !== '') {
|
|
442
|
+
// Convert relative path to absolute path
|
|
220
443
|
logfilePath = path.resolve(logfilePath);
|
|
444
|
+
// Check if the file exists and unlink it if requested
|
|
221
445
|
if (unlink && fs.existsSync(logfilePath)) {
|
|
222
446
|
try {
|
|
223
447
|
fs.unlinkSync(logfilePath);
|
|
@@ -235,6 +459,11 @@ export class AnsiLogger {
|
|
|
235
459
|
__AnsiLoggerFileLogSize__ = undefined;
|
|
236
460
|
return undefined;
|
|
237
461
|
}
|
|
462
|
+
/**
|
|
463
|
+
* Gets the global logfile currently used by the logger.
|
|
464
|
+
*
|
|
465
|
+
* @returns {string | undefined} The path name of the log file.
|
|
466
|
+
*/
|
|
238
467
|
static getGlobalLogfile() {
|
|
239
468
|
if (__AnsiLoggerFilePath__) {
|
|
240
469
|
return __AnsiLoggerFilePath__;
|
|
@@ -243,6 +472,11 @@ export class AnsiLogger {
|
|
|
243
472
|
return undefined;
|
|
244
473
|
}
|
|
245
474
|
}
|
|
475
|
+
/**
|
|
476
|
+
* Gets the global logfile log level used by the loggers.
|
|
477
|
+
*
|
|
478
|
+
* @returns {LogLevel | undefined} The log level of the global logfile.
|
|
479
|
+
*/
|
|
246
480
|
static getGlobalLogfileLevel() {
|
|
247
481
|
if (__AnsiLoggerFileLoglevel__) {
|
|
248
482
|
return __AnsiLoggerFileLoglevel__;
|
|
@@ -251,50 +485,65 @@ export class AnsiLogger {
|
|
|
251
485
|
return undefined;
|
|
252
486
|
}
|
|
253
487
|
}
|
|
488
|
+
/**
|
|
489
|
+
* Sets the global logfile log level used by the loggers.
|
|
490
|
+
*
|
|
491
|
+
* @param {LogLevel} logfileLevel - The global logfile log level used by the loggers.
|
|
492
|
+
*
|
|
493
|
+
* @returns {LogLevel | undefined} The log level of the global logfile.
|
|
494
|
+
*/
|
|
254
495
|
static setGlobalLogfileLevel(logfileLevel) {
|
|
255
496
|
__AnsiLoggerFileLoglevel__ = logfileLevel;
|
|
256
497
|
return __AnsiLoggerFileLoglevel__;
|
|
257
498
|
}
|
|
499
|
+
/**
|
|
500
|
+
* Determines whether a log message with the given level should be logged based on the configured log level.
|
|
501
|
+
*
|
|
502
|
+
* @param {LogLevel} level - The level of the log message.
|
|
503
|
+
* @param {LogLevel | undefined} configuredLevel - The configured log level.
|
|
504
|
+
*
|
|
505
|
+
* @returns {boolean} A boolean indicating whether the log message should be logged.
|
|
506
|
+
*/
|
|
258
507
|
shouldLog(level, configuredLevel) {
|
|
259
508
|
switch (level) {
|
|
260
|
-
case ""
|
|
509
|
+
case "" /* LogLevel.NONE */:
|
|
261
510
|
return false;
|
|
262
|
-
case "debug"
|
|
263
|
-
if (configuredLevel === "debug") {
|
|
511
|
+
case "debug" /* LogLevel.DEBUG */:
|
|
512
|
+
if (configuredLevel === "debug" /* LogLevel.DEBUG */) {
|
|
264
513
|
return true;
|
|
265
514
|
}
|
|
266
515
|
break;
|
|
267
|
-
case "info"
|
|
268
|
-
if (configuredLevel === "debug" || configuredLevel === "info") {
|
|
516
|
+
case "info" /* LogLevel.INFO */:
|
|
517
|
+
if (configuredLevel === "debug" /* LogLevel.DEBUG */ || configuredLevel === "info" /* LogLevel.INFO */) {
|
|
269
518
|
return true;
|
|
270
519
|
}
|
|
271
520
|
break;
|
|
272
|
-
case "notice"
|
|
273
|
-
if (configuredLevel === "debug" || configuredLevel === "info" || configuredLevel === "notice") {
|
|
521
|
+
case "notice" /* LogLevel.NOTICE */:
|
|
522
|
+
if (configuredLevel === "debug" /* LogLevel.DEBUG */ || configuredLevel === "info" /* LogLevel.INFO */ || configuredLevel === "notice" /* LogLevel.NOTICE */) {
|
|
274
523
|
return true;
|
|
275
524
|
}
|
|
276
525
|
break;
|
|
277
|
-
case "warn"
|
|
278
|
-
if (configuredLevel === "debug" || configuredLevel === "info" || configuredLevel === "notice" || configuredLevel === "warn") {
|
|
526
|
+
case "warn" /* LogLevel.WARN */:
|
|
527
|
+
if (configuredLevel === "debug" /* LogLevel.DEBUG */ || configuredLevel === "info" /* LogLevel.INFO */ || configuredLevel === "notice" /* LogLevel.NOTICE */ || configuredLevel === "warn" /* LogLevel.WARN */) {
|
|
279
528
|
return true;
|
|
280
529
|
}
|
|
281
530
|
break;
|
|
282
|
-
case "error"
|
|
283
|
-
if (configuredLevel === "debug" ||
|
|
284
|
-
configuredLevel === "info" ||
|
|
285
|
-
configuredLevel === "notice" ||
|
|
286
|
-
configuredLevel === "warn" ||
|
|
287
|
-
configuredLevel === "error") {
|
|
531
|
+
case "error" /* LogLevel.ERROR */:
|
|
532
|
+
if (configuredLevel === "debug" /* LogLevel.DEBUG */ ||
|
|
533
|
+
configuredLevel === "info" /* LogLevel.INFO */ ||
|
|
534
|
+
configuredLevel === "notice" /* LogLevel.NOTICE */ ||
|
|
535
|
+
configuredLevel === "warn" /* LogLevel.WARN */ ||
|
|
536
|
+
configuredLevel === "error" /* LogLevel.ERROR */) {
|
|
288
537
|
return true;
|
|
289
538
|
}
|
|
290
539
|
break;
|
|
291
|
-
case "fatal"
|
|
292
|
-
if (configuredLevel === "debug" ||
|
|
293
|
-
configuredLevel === "info" ||
|
|
294
|
-
configuredLevel === "notice" ||
|
|
295
|
-
configuredLevel === "warn" ||
|
|
296
|
-
configuredLevel === "error" ||
|
|
297
|
-
configuredLevel === "fatal") {
|
|
540
|
+
case "fatal" /* LogLevel.FATAL */:
|
|
541
|
+
if (configuredLevel === "debug" /* LogLevel.DEBUG */ ||
|
|
542
|
+
configuredLevel === "info" /* LogLevel.INFO */ ||
|
|
543
|
+
configuredLevel === "notice" /* LogLevel.NOTICE */ ||
|
|
544
|
+
configuredLevel === "warn" /* LogLevel.WARN */ ||
|
|
545
|
+
configuredLevel === "error" /* LogLevel.ERROR */ ||
|
|
546
|
+
configuredLevel === "fatal" /* LogLevel.FATAL */) {
|
|
298
547
|
return true;
|
|
299
548
|
}
|
|
300
549
|
break;
|
|
@@ -303,13 +552,23 @@ export class AnsiLogger {
|
|
|
303
552
|
}
|
|
304
553
|
return false;
|
|
305
554
|
}
|
|
555
|
+
/**
|
|
556
|
+
* Formats a Date object into a custom string format.
|
|
557
|
+
*
|
|
558
|
+
* @param {Date} date - The Date object to format.
|
|
559
|
+
* @param {string} formatString - The string format to use.
|
|
560
|
+
* @returns {string} The formatted date.
|
|
561
|
+
* It only handles years, months, days, hours, minutes, and seconds
|
|
562
|
+
* with this format 'yyyy-MM-dd HH:mm:ss'
|
|
563
|
+
*/
|
|
306
564
|
formatCustomTimestamp(date, formatString) {
|
|
307
565
|
const year = date.getFullYear();
|
|
308
|
-
const month = date.getMonth() + 1;
|
|
566
|
+
const month = date.getMonth() + 1; // getMonth() returns 0-11
|
|
309
567
|
const day = date.getDate();
|
|
310
568
|
const hours = date.getHours();
|
|
311
569
|
const minutes = date.getMinutes();
|
|
312
570
|
const seconds = date.getSeconds();
|
|
571
|
+
// Replace format tokens with actual values. Add more as needed.
|
|
313
572
|
return formatString
|
|
314
573
|
.replace('yyyy', year.toString())
|
|
315
574
|
.replace('MM', month.toString().padStart(2, '0'))
|
|
@@ -318,35 +577,47 @@ export class AnsiLogger {
|
|
|
318
577
|
.replace('mm', minutes.toString().padStart(2, '0'))
|
|
319
578
|
.replace('ss', seconds.toString().padStart(2, '0'));
|
|
320
579
|
}
|
|
580
|
+
/**
|
|
581
|
+
* Returns the current timestamp as a string.
|
|
582
|
+
*
|
|
583
|
+
* @returns {string} The current timestamp.
|
|
584
|
+
*/
|
|
321
585
|
now() {
|
|
322
586
|
return this.getTimestamp();
|
|
323
587
|
}
|
|
588
|
+
/**
|
|
589
|
+
* Returns the timestamp based on the configured format.
|
|
590
|
+
* If the log start time is set, it returns the time passed since the start time.
|
|
591
|
+
* Otherwise, it returns the current timestamp based on the configured format.
|
|
592
|
+
*
|
|
593
|
+
* @returns {string} The timestamp string.
|
|
594
|
+
*/
|
|
324
595
|
getTimestamp() {
|
|
325
|
-
if (this
|
|
326
|
-
const timePassed = Date.now() - this
|
|
596
|
+
if (this.#logStartTime !== 0) {
|
|
597
|
+
const timePassed = Date.now() - this.#logStartTime;
|
|
327
598
|
return `Timer: ${timePassed.toString().padStart(7, ' ')} ms`;
|
|
328
599
|
}
|
|
329
600
|
else {
|
|
330
601
|
let timestamp;
|
|
331
|
-
switch (this
|
|
332
|
-
case 1
|
|
602
|
+
switch (this.#logTimestampFormat) {
|
|
603
|
+
case 1 /* TimestampFormat.LOCAL_DATE */:
|
|
333
604
|
timestamp = new Date().toLocaleDateString();
|
|
334
605
|
break;
|
|
335
|
-
case 2
|
|
606
|
+
case 2 /* TimestampFormat.LOCAL_TIME */:
|
|
336
607
|
timestamp = new Date().toLocaleTimeString();
|
|
337
608
|
break;
|
|
338
|
-
case 5
|
|
339
|
-
case 3
|
|
609
|
+
case 5 /* TimestampFormat.HOMEBRIDGE */:
|
|
610
|
+
case 3 /* TimestampFormat.LOCAL_DATE_TIME */:
|
|
340
611
|
timestamp = new Date().toLocaleString();
|
|
341
612
|
break;
|
|
342
|
-
case 0
|
|
613
|
+
case 0 /* TimestampFormat.ISO */:
|
|
343
614
|
timestamp = new Date().toISOString();
|
|
344
615
|
break;
|
|
345
|
-
case 4
|
|
616
|
+
case 4 /* TimestampFormat.TIME_MILLIS */:
|
|
346
617
|
timestamp = `${new Date().getHours().toString().padStart(2, '0')}:${new Date().getMinutes().toString().padStart(2, '0')}:${new Date().getSeconds().toString().padStart(2, '0')}.${new Date().getMilliseconds().toString().padStart(3, '0')}`;
|
|
347
618
|
break;
|
|
348
|
-
case 6
|
|
349
|
-
timestamp = this.formatCustomTimestamp(new Date(), this
|
|
619
|
+
case 6 /* TimestampFormat.CUSTOM */:
|
|
620
|
+
timestamp = this.formatCustomTimestamp(new Date(), this.#logCustomTimestampFormat);
|
|
350
621
|
break;
|
|
351
622
|
default:
|
|
352
623
|
timestamp = new Date().toLocaleString();
|
|
@@ -355,6 +626,16 @@ export class AnsiLogger {
|
|
|
355
626
|
return timestamp;
|
|
356
627
|
}
|
|
357
628
|
}
|
|
629
|
+
/**
|
|
630
|
+
* Writes a log message to a file.
|
|
631
|
+
*
|
|
632
|
+
* @param {string} filePath - The path of the file to write the log message to.
|
|
633
|
+
* @param {LogLevel} level - The log level of the message.
|
|
634
|
+
* @param {string} message - The log message.
|
|
635
|
+
* @param {...any[]} parameters - Additional parameters to include in the log message.
|
|
636
|
+
* @returns {number} - The length of the log message including the appended newline character.
|
|
637
|
+
*/
|
|
638
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
358
639
|
logToFile(filePath, level, message, ...parameters) {
|
|
359
640
|
const parametersString = parameters
|
|
360
641
|
.map((parameter) => {
|
|
@@ -367,6 +648,8 @@ export class AnsiLogger {
|
|
|
367
648
|
return stringify(parameter);
|
|
368
649
|
case 'string':
|
|
369
650
|
return parameter;
|
|
651
|
+
// case 'undefined':
|
|
652
|
+
// return 'undefined';
|
|
370
653
|
case 'function':
|
|
371
654
|
return '(function)';
|
|
372
655
|
default:
|
|
@@ -374,8 +657,9 @@ export class AnsiLogger {
|
|
|
374
657
|
}
|
|
375
658
|
})
|
|
376
659
|
.join(' ');
|
|
377
|
-
let messageLog = `[${this.getTimestamp()}] [${this
|
|
660
|
+
let messageLog = `[${this.getTimestamp()}] [${this.#logName}] [${level}] ` + message + ' ' + parametersString;
|
|
378
661
|
messageLog = messageLog
|
|
662
|
+
// eslint-disable-next-line no-control-regex
|
|
379
663
|
.replace(/[\u001b\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]/g, '')
|
|
380
664
|
.replaceAll('\t', ' ')
|
|
381
665
|
.replaceAll('\r', '')
|
|
@@ -383,70 +667,88 @@ export class AnsiLogger {
|
|
|
383
667
|
fs.appendFileSync(filePath, messageLog + os.EOL);
|
|
384
668
|
return messageLog.length + 1;
|
|
385
669
|
}
|
|
670
|
+
/**
|
|
671
|
+
* Logs a message with a specific level (e.g. debug, info, notice, warn, error, fatal) and additional parameters.
|
|
672
|
+
* This method formats the log message with ANSI colors based on the log level and other logger settings.
|
|
673
|
+
* It supports dynamic parameters for more detailed and formatted logging.
|
|
674
|
+
*
|
|
675
|
+
* @param {LogLevel} level - The severity level of the log message.
|
|
676
|
+
* @param {string} message - The primary log message to be displayed.
|
|
677
|
+
* @param {...any[]} parameters - Additional parameters to be logged. Supports any number of parameters.
|
|
678
|
+
*/
|
|
679
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
386
680
|
log(level, message, ...parameters) {
|
|
387
|
-
const s1ln = '[38;5;0;48;5;31m';
|
|
388
|
-
const s2ln = '[38;5;0;48;5;255m';
|
|
389
|
-
const s3ln = '[38;5;0;48;5;220m';
|
|
390
|
-
const s4ln = '[38;5;0;48;5;9m';
|
|
681
|
+
const s1ln = '[38;5;0;48;5;31m'; // Highlight LogName Black on Cyan
|
|
682
|
+
const s2ln = '[38;5;0;48;5;255m'; // Highlight LogName Black on White
|
|
683
|
+
const s3ln = '[38;5;0;48;5;220m'; // Highlight LogName Black on Yellow
|
|
684
|
+
const s4ln = '[38;5;0;48;5;9m'; // Highlight LogName Black on Red
|
|
391
685
|
if (typeof level !== 'string' || level.startsWith === undefined || typeof message !== 'string' || message.startsWith === undefined) {
|
|
392
686
|
return;
|
|
393
687
|
}
|
|
688
|
+
// Local callback
|
|
394
689
|
try {
|
|
395
|
-
if (this
|
|
690
|
+
if (this.#callback !== undefined && this.shouldLog(level, this.#logLevel)) {
|
|
691
|
+
// Convert parameters to string and append to message
|
|
396
692
|
const parametersString = parameters.length > 0 ? ' ' + parameters.join(' ') : '';
|
|
397
693
|
const newMessage = message + parametersString;
|
|
398
|
-
this
|
|
694
|
+
this.#callback(level, this.getTimestamp(), this.#logName, newMessage);
|
|
399
695
|
}
|
|
400
696
|
}
|
|
401
697
|
catch (error) {
|
|
402
698
|
console.error('Error executing local callback:', error);
|
|
403
699
|
}
|
|
700
|
+
// Global callback
|
|
404
701
|
try {
|
|
405
702
|
if (__AnsiLoggerCallback__ && __AnsiLoggerCallback__ !== undefined && this.shouldLog(level, __AnsiLoggerCallbackLoglevel__)) {
|
|
703
|
+
// Convert parameters to string and append to message
|
|
406
704
|
const parametersString = parameters.length > 0 ? ' ' + parameters.join(' ') : '';
|
|
407
705
|
const newMessage = message + parametersString;
|
|
408
|
-
__AnsiLoggerCallback__(level, this.getTimestamp(), this
|
|
706
|
+
__AnsiLoggerCallback__(level, this.getTimestamp(), this.#logName, newMessage);
|
|
409
707
|
}
|
|
410
708
|
}
|
|
411
709
|
catch (error) {
|
|
412
710
|
console.error('Error executing global callback:', error);
|
|
413
711
|
}
|
|
712
|
+
// Local file logger
|
|
414
713
|
try {
|
|
415
|
-
if (this.logFilePath !== undefined && this
|
|
714
|
+
if (this.logFilePath !== undefined && this.#logFileSize !== undefined && this.#logFileSize < this.#maxFileSize && this.shouldLog(level, this.#logLevel)) {
|
|
416
715
|
const size = this.logToFile(this.logFilePath, level, message, ...parameters);
|
|
417
|
-
this
|
|
418
|
-
if (this
|
|
419
|
-
|
|
716
|
+
this.#logFileSize += size;
|
|
717
|
+
if (this.#logFileSize >= this.#maxFileSize) {
|
|
718
|
+
// istanbul ignore next
|
|
719
|
+
fs.appendFileSync(this.logFilePath, `Logging on file has been stoppped because the file size is greater then ${this.#maxFileSize}B.\n`);
|
|
420
720
|
}
|
|
421
721
|
}
|
|
422
722
|
}
|
|
423
723
|
catch (error) {
|
|
424
724
|
console.error(`Error writing to the local log file ${this.logFilePath}:`, error);
|
|
425
725
|
}
|
|
726
|
+
// Global file logger
|
|
426
727
|
try {
|
|
427
728
|
if (__AnsiLoggerFilePath__ &&
|
|
428
729
|
__AnsiLoggerFilePath__ !== undefined &&
|
|
429
730
|
__AnsiLoggerFileLogSize__ !== undefined &&
|
|
430
|
-
__AnsiLoggerFileLogSize__ < this
|
|
731
|
+
__AnsiLoggerFileLogSize__ < this.#maxFileSize &&
|
|
431
732
|
this.shouldLog(level, __AnsiLoggerFileLoglevel__)) {
|
|
432
733
|
const size = this.logToFile(__AnsiLoggerFilePath__, level, message, ...parameters);
|
|
433
734
|
__AnsiLoggerFileLogSize__ += size;
|
|
434
|
-
if (__AnsiLoggerFileLogSize__ >= this
|
|
435
|
-
|
|
735
|
+
if (__AnsiLoggerFileLogSize__ >= this.#maxFileSize) {
|
|
736
|
+
// istanbul ignore next
|
|
737
|
+
fs.appendFileSync(__AnsiLoggerFilePath__, `Logging on file has been stoppped because the file size is greater then ${this.#maxFileSize}B.\n`);
|
|
436
738
|
}
|
|
437
739
|
}
|
|
438
740
|
}
|
|
439
741
|
catch (error) {
|
|
440
742
|
console.error(`Error writing to the global log file ${__AnsiLoggerFilePath__}:`, error);
|
|
441
743
|
}
|
|
442
|
-
if (this
|
|
443
|
-
if (level !== "") {
|
|
444
|
-
this.
|
|
744
|
+
if (this.#extLog !== undefined) {
|
|
745
|
+
if (level !== "" /* LogLevel.NONE */) {
|
|
746
|
+
this.#extLog.log(level, message, ...parameters);
|
|
445
747
|
}
|
|
446
748
|
}
|
|
447
749
|
else {
|
|
448
|
-
if (this
|
|
449
|
-
let logNameColor = this
|
|
750
|
+
if (this.#logWithColors) {
|
|
751
|
+
let logNameColor = this.#logNameColor;
|
|
450
752
|
if (message.startsWith('****')) {
|
|
451
753
|
logNameColor = s4ln;
|
|
452
754
|
message = message.slice(4);
|
|
@@ -464,34 +766,34 @@ export class AnsiLogger {
|
|
|
464
766
|
message = message.slice(1);
|
|
465
767
|
}
|
|
466
768
|
switch (level) {
|
|
467
|
-
case "debug"
|
|
468
|
-
if (this.shouldLog(level, this
|
|
469
|
-
console.log(`${rs}${this
|
|
769
|
+
case "debug" /* LogLevel.DEBUG */:
|
|
770
|
+
if (this.shouldLog(level, this.#logLevel)) {
|
|
771
|
+
console.log(`${rs}${this.#logTimeStampColor}[${this.getTimestamp()}] ${logNameColor}[${this.#logName}]${rs}${db}`, message + rs + rk, ...parameters);
|
|
470
772
|
}
|
|
471
773
|
break;
|
|
472
|
-
case "info"
|
|
473
|
-
if (this.shouldLog(level, this
|
|
474
|
-
console.log(`${rs}${this
|
|
774
|
+
case "info" /* LogLevel.INFO */:
|
|
775
|
+
if (this.shouldLog(level, this.#logLevel)) {
|
|
776
|
+
console.log(`${rs}${this.#logTimeStampColor}[${this.getTimestamp()}] ${logNameColor}[${this.#logName}]${rs}${nf}`, message + rs + rk, ...parameters);
|
|
475
777
|
}
|
|
476
778
|
break;
|
|
477
|
-
case "notice"
|
|
478
|
-
if (this.shouldLog(level, this
|
|
479
|
-
console.log(`${rs}${this
|
|
779
|
+
case "notice" /* LogLevel.NOTICE */:
|
|
780
|
+
if (this.shouldLog(level, this.#logLevel)) {
|
|
781
|
+
console.log(`${rs}${this.#logTimeStampColor}[${this.getTimestamp()}] ${logNameColor}[${this.#logName}]${rs}${nt}`, message + rs + rk, ...parameters);
|
|
480
782
|
}
|
|
481
783
|
break;
|
|
482
|
-
case "warn"
|
|
483
|
-
if (this.shouldLog(level, this
|
|
484
|
-
console.log(`${rs}${this
|
|
784
|
+
case "warn" /* LogLevel.WARN */:
|
|
785
|
+
if (this.shouldLog(level, this.#logLevel)) {
|
|
786
|
+
console.log(`${rs}${this.#logTimeStampColor}[${this.getTimestamp()}] ${logNameColor}[${this.#logName}]${rs}${wr}`, message + rs + rk, ...parameters);
|
|
485
787
|
}
|
|
486
788
|
break;
|
|
487
|
-
case "error"
|
|
488
|
-
if (this.shouldLog(level, this
|
|
489
|
-
console.log(`${rs}${this
|
|
789
|
+
case "error" /* LogLevel.ERROR */:
|
|
790
|
+
if (this.shouldLog(level, this.#logLevel)) {
|
|
791
|
+
console.log(`${rs}${this.#logTimeStampColor}[${this.getTimestamp()}] ${logNameColor}[${this.#logName}]${rs}${er}`, message + rs + rk, ...parameters);
|
|
490
792
|
}
|
|
491
793
|
break;
|
|
492
|
-
case "fatal"
|
|
493
|
-
if (this.shouldLog(level, this
|
|
494
|
-
console.log(`${rs}${this
|
|
794
|
+
case "fatal" /* LogLevel.FATAL */:
|
|
795
|
+
if (this.shouldLog(level, this.#logLevel)) {
|
|
796
|
+
console.log(`${rs}${this.#logTimeStampColor}[${this.getTimestamp()}] ${logNameColor}[${this.#logName}]${rs}${ft}`, message + rs + rk, ...parameters);
|
|
495
797
|
}
|
|
496
798
|
break;
|
|
497
799
|
default:
|
|
@@ -499,44 +801,58 @@ export class AnsiLogger {
|
|
|
499
801
|
}
|
|
500
802
|
}
|
|
501
803
|
else {
|
|
804
|
+
if (message.startsWith('****')) {
|
|
805
|
+
message = message.slice(4);
|
|
806
|
+
}
|
|
807
|
+
else if (message.startsWith('***')) {
|
|
808
|
+
message = message.slice(3);
|
|
809
|
+
}
|
|
810
|
+
else if (message.startsWith('**')) {
|
|
811
|
+
message = message.slice(2);
|
|
812
|
+
}
|
|
813
|
+
else if (message.startsWith('*')) {
|
|
814
|
+
message = message.slice(1);
|
|
815
|
+
}
|
|
816
|
+
// eslint-disable-next-line no-control-regex
|
|
817
|
+
message = message.replace(/[\u001b\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]/g, '');
|
|
502
818
|
switch (level) {
|
|
503
|
-
case "debug"
|
|
504
|
-
if (this
|
|
505
|
-
console.log(`[${this.getTimestamp()}] [${this
|
|
819
|
+
case "debug" /* LogLevel.DEBUG */:
|
|
820
|
+
if (this.#logLevel === "debug" /* LogLevel.DEBUG */) {
|
|
821
|
+
console.log(`[${this.getTimestamp()}] [${this.#logName}] [${level}] ${message}`, ...parameters);
|
|
506
822
|
}
|
|
507
823
|
break;
|
|
508
|
-
case "info"
|
|
509
|
-
if (this
|
|
510
|
-
console.log(`[${this.getTimestamp()}] [${this
|
|
824
|
+
case "info" /* LogLevel.INFO */:
|
|
825
|
+
if (this.#logLevel === "debug" /* LogLevel.DEBUG */ || this.#logLevel === "info" /* LogLevel.INFO */) {
|
|
826
|
+
console.log(`[${this.getTimestamp()}] [${this.#logName}] [${level}] ${message}`, ...parameters);
|
|
511
827
|
}
|
|
512
828
|
break;
|
|
513
|
-
case "notice"
|
|
514
|
-
if (this
|
|
515
|
-
console.log(`[${this.getTimestamp()}] [${this
|
|
829
|
+
case "notice" /* LogLevel.NOTICE */:
|
|
830
|
+
if (this.#logLevel === "debug" /* LogLevel.DEBUG */ || this.#logLevel === "info" /* LogLevel.INFO */ || this.#logLevel === "notice" /* LogLevel.NOTICE */) {
|
|
831
|
+
console.log(`[${this.getTimestamp()}] [${this.#logName}] [${level}] ${message}`, ...parameters);
|
|
516
832
|
}
|
|
517
833
|
break;
|
|
518
|
-
case "warn"
|
|
519
|
-
if (this
|
|
520
|
-
console.log(`[${this.getTimestamp()}] [${this
|
|
834
|
+
case "warn" /* LogLevel.WARN */:
|
|
835
|
+
if (this.#logLevel === "debug" /* LogLevel.DEBUG */ || this.#logLevel === "info" /* LogLevel.INFO */ || this.#logLevel === "notice" /* LogLevel.NOTICE */ || this.#logLevel === "warn" /* LogLevel.WARN */) {
|
|
836
|
+
console.log(`[${this.getTimestamp()}] [${this.#logName}] [${level}] ${message}`, ...parameters);
|
|
521
837
|
}
|
|
522
838
|
break;
|
|
523
|
-
case "error"
|
|
524
|
-
if (this
|
|
525
|
-
this
|
|
526
|
-
this
|
|
527
|
-
this
|
|
528
|
-
this
|
|
529
|
-
console.log(`[${this.getTimestamp()}] [${this
|
|
839
|
+
case "error" /* LogLevel.ERROR */:
|
|
840
|
+
if (this.#logLevel === "debug" /* LogLevel.DEBUG */ ||
|
|
841
|
+
this.#logLevel === "info" /* LogLevel.INFO */ ||
|
|
842
|
+
this.#logLevel === "notice" /* LogLevel.NOTICE */ ||
|
|
843
|
+
this.#logLevel === "warn" /* LogLevel.WARN */ ||
|
|
844
|
+
this.#logLevel === "error" /* LogLevel.ERROR */) {
|
|
845
|
+
console.log(`[${this.getTimestamp()}] [${this.#logName}] [${level}] ${message}`, ...parameters);
|
|
530
846
|
}
|
|
531
847
|
break;
|
|
532
|
-
case "fatal"
|
|
533
|
-
if (this
|
|
534
|
-
this
|
|
535
|
-
this
|
|
536
|
-
this
|
|
537
|
-
this
|
|
538
|
-
this
|
|
539
|
-
console.log(`[${this.getTimestamp()}] [${this
|
|
848
|
+
case "fatal" /* LogLevel.FATAL */:
|
|
849
|
+
if (this.#logLevel === "debug" /* LogLevel.DEBUG */ ||
|
|
850
|
+
this.#logLevel === "info" /* LogLevel.INFO */ ||
|
|
851
|
+
this.#logLevel === "notice" /* LogLevel.NOTICE */ ||
|
|
852
|
+
this.#logLevel === "warn" /* LogLevel.WARN */ ||
|
|
853
|
+
this.#logLevel === "error" /* LogLevel.ERROR */ ||
|
|
854
|
+
this.#logLevel === "fatal" /* LogLevel.FATAL */) {
|
|
855
|
+
console.log(`[${this.getTimestamp()}] [${this.#logName}] [${level}] ${message}`, ...parameters);
|
|
540
856
|
}
|
|
541
857
|
break;
|
|
542
858
|
default:
|
|
@@ -545,22 +861,108 @@ export class AnsiLogger {
|
|
|
545
861
|
}
|
|
546
862
|
}
|
|
547
863
|
}
|
|
864
|
+
/**
|
|
865
|
+
* Logs a debug message if debug logging is enabled. This is a convenience method that delegates to the `log` method with the `LogLevel.DEBUG` level.
|
|
866
|
+
*
|
|
867
|
+
* @param {string} message - The message to log.
|
|
868
|
+
* @param {...any[]} parameters - Additional parameters to be included in the log message. Supports any number of parameters.
|
|
869
|
+
*/
|
|
870
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
548
871
|
debug(message, ...parameters) {
|
|
549
|
-
this.log("debug"
|
|
550
|
-
}
|
|
872
|
+
this.log("debug" /* LogLevel.DEBUG */, message, ...parameters);
|
|
873
|
+
}
|
|
874
|
+
/**
|
|
875
|
+
* Logs an informational message. This is a convenience method that delegates to the `log` method with the `LogLevel.INFO` level.
|
|
876
|
+
*
|
|
877
|
+
* @param {string} message - The message to log.
|
|
878
|
+
* @param {...any[]} parameters - Additional parameters to be included in the log message. Supports any number of parameters.
|
|
879
|
+
*/
|
|
880
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
551
881
|
info(message, ...parameters) {
|
|
552
|
-
this.log("info"
|
|
553
|
-
}
|
|
882
|
+
this.log("info" /* LogLevel.INFO */, message, ...parameters);
|
|
883
|
+
}
|
|
884
|
+
/**
|
|
885
|
+
* Logs a notice message. This is a convenience method that delegates to the `log` method with the `LogLevel.NOTICE` level.
|
|
886
|
+
*
|
|
887
|
+
* @param {string} message - The message to log.
|
|
888
|
+
* @param {...any[]} parameters - Additional parameters to be included in the log message. Supports any number of parameters.
|
|
889
|
+
*/
|
|
890
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
554
891
|
notice(message, ...parameters) {
|
|
555
|
-
this.log("notice"
|
|
556
|
-
}
|
|
892
|
+
this.log("notice" /* LogLevel.NOTICE */, message, ...parameters);
|
|
893
|
+
}
|
|
894
|
+
/**
|
|
895
|
+
* Logs a warning message. This is a convenience method that delegates to the `log` method with the `LogLevel.WARN` level.
|
|
896
|
+
*
|
|
897
|
+
* @param {string} message - The message to log.
|
|
898
|
+
* @param {...any[]} parameters - Additional parameters to be included in the log message. Supports any number of parameters.
|
|
899
|
+
*/
|
|
900
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
557
901
|
warn(message, ...parameters) {
|
|
558
|
-
this.log("warn"
|
|
559
|
-
}
|
|
902
|
+
this.log("warn" /* LogLevel.WARN */, message, ...parameters);
|
|
903
|
+
}
|
|
904
|
+
/**
|
|
905
|
+
* Logs an error message. This is a convenience method that delegates to the `log` method with the `LogLevel.ERROR` level.
|
|
906
|
+
*
|
|
907
|
+
* @param {string} message - The message to log.
|
|
908
|
+
* @param {...any[]} parameters - Additional parameters to be included in the log message. Supports any number of parameters.
|
|
909
|
+
*/
|
|
910
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
560
911
|
error(message, ...parameters) {
|
|
561
|
-
this.log("error"
|
|
562
|
-
}
|
|
912
|
+
this.log("error" /* LogLevel.ERROR */, message, ...parameters);
|
|
913
|
+
}
|
|
914
|
+
/**
|
|
915
|
+
* Logs a fatal message. This is a convenience method that delegates to the `log` method with the `LogLevel.FATAL` level.
|
|
916
|
+
*
|
|
917
|
+
* @param {string} message - The message to log.
|
|
918
|
+
* @param {...any[]} parameters - Additional parameters to be included in the log message. Supports any number of parameters.
|
|
919
|
+
*/
|
|
920
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
563
921
|
fatal(message, ...parameters) {
|
|
564
|
-
this.log("fatal"
|
|
922
|
+
this.log("fatal" /* LogLevel.FATAL */, message, ...parameters);
|
|
565
923
|
}
|
|
566
924
|
}
|
|
925
|
+
/*
|
|
926
|
+
[0m - Reset (clear color)
|
|
927
|
+
[1m - Bold
|
|
928
|
+
[3m - Italic
|
|
929
|
+
[4m - Underline
|
|
930
|
+
[K - Erase the line from cursor
|
|
931
|
+
|
|
932
|
+
[30m - Black
|
|
933
|
+
[31m - Red
|
|
934
|
+
[32m - Green
|
|
935
|
+
[33m - Yellow
|
|
936
|
+
[34m - Blue
|
|
937
|
+
[35m - Magenta
|
|
938
|
+
[36m - Cyan
|
|
939
|
+
[37m - White
|
|
940
|
+
|
|
941
|
+
[90-97m - Bright
|
|
942
|
+
|
|
943
|
+
[40m - Black background
|
|
944
|
+
[41m - Red background
|
|
945
|
+
[42m - Green background
|
|
946
|
+
[43m - Yellow background
|
|
947
|
+
[44m - Blue background
|
|
948
|
+
[45m - Magenta background
|
|
949
|
+
[46m - Cyan background
|
|
950
|
+
[47m - White background
|
|
951
|
+
|
|
952
|
+
[100-107m - Bright background
|
|
953
|
+
|
|
954
|
+
[38;2;255;105;50m // Orange
|
|
955
|
+
|
|
956
|
+
RGB foreground
|
|
957
|
+
[38;2;<R>;<G>;<B>m
|
|
958
|
+
|
|
959
|
+
RGB background
|
|
960
|
+
[48;2;<R>;<G>;<B>m
|
|
961
|
+
|
|
962
|
+
256 colors foreground
|
|
963
|
+
[38;5;<FG COLOR>m
|
|
964
|
+
|
|
965
|
+
256 colors background
|
|
966
|
+
[48;5;<BG COLOR>m
|
|
967
|
+
*/
|
|
968
|
+
//# sourceMappingURL=logger.js.map
|