@theshelf/logging 0.3.2 → 0.4.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 +36 -53
- package/dist/Logger.d.ts +10 -7
- package/dist/Logger.js +35 -18
- package/dist/definitions/interfaces.d.ts +2 -5
- package/dist/definitions/types.d.ts +7 -0
- package/dist/definitions/types.js +1 -0
- package/dist/drivers/Console.d.ts +3 -5
- package/dist/drivers/Console.js +16 -13
- package/dist/drivers/Memory.d.ts +2 -11
- package/dist/drivers/Memory.js +2 -15
- package/dist/drivers/Void.d.ts +2 -5
- package/dist/drivers/Void.js +2 -14
- package/dist/index.d.ts +4 -4
- package/dist/index.js +1 -2
- package/dist/utils/levelToString.d.ts +2 -0
- package/dist/utils/levelToString.js +5 -0
- package/package.json +4 -11
- package/dist/drivers/Database.d.ts +0 -12
- package/dist/drivers/Database.js +0 -31
package/README.md
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
|
|
2
|
-
# Logging | The Shelf
|
|
2
|
+
# Logging core | The Shelf
|
|
3
3
|
|
|
4
|
-
|
|
4
|
+
This package contains the definition of the logging operations. It uses a interchangeable driver system for performing the actual operations. A console, in-memory and void driver is included.
|
|
5
5
|
|
|
6
6
|
## Installation
|
|
7
7
|
|
|
@@ -9,31 +9,20 @@ The logging package provides a universal interaction layer with an actual loggin
|
|
|
9
9
|
npm install @theshelf/logging
|
|
10
10
|
```
|
|
11
11
|
|
|
12
|
-
## Drivers
|
|
13
|
-
|
|
14
|
-
Currently, there are three drivers available:
|
|
15
|
-
|
|
16
|
-
* **Void** - dummy driver that doesn't log anything (suited for testing).
|
|
17
|
-
* **Memory** - in memory logging (suited for testing).
|
|
18
|
-
* **Console** - driver based on the Node.js console.
|
|
19
|
-
* **Database** - driver that logs messages into a database.
|
|
20
|
-
|
|
21
12
|
## How to use
|
|
22
13
|
|
|
23
14
|
The basic set up looks like this.
|
|
24
15
|
|
|
25
16
|
```ts
|
|
26
|
-
import Logger, {
|
|
17
|
+
import Logger, { MemoryDriver } from '@theshelf/logging';
|
|
27
18
|
|
|
28
|
-
const driver = new
|
|
19
|
+
const driver = new MemoryDriver();
|
|
29
20
|
const logger = new Logger(driver);
|
|
30
21
|
|
|
31
22
|
// Perform operations with the logger instance
|
|
32
23
|
```
|
|
33
24
|
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
#### Logger
|
|
25
|
+
## Configuration
|
|
37
26
|
|
|
38
27
|
The logger has a configurable log level.
|
|
39
28
|
|
|
@@ -43,59 +32,32 @@ import { LogLevels } from '@theshelf/logging';
|
|
|
43
32
|
logger.logLevel = LogLevels.DEBUG; // default level
|
|
44
33
|
```
|
|
45
34
|
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
#### Void driver
|
|
49
|
-
|
|
50
|
-
No configuration options.
|
|
51
|
-
|
|
52
|
-
#### Memory driver
|
|
53
|
-
|
|
54
|
-
No configuration options.
|
|
55
|
-
|
|
56
|
-
#### Console driver
|
|
57
|
-
|
|
58
|
-
No configuration options.
|
|
59
|
-
|
|
60
|
-
#### Database driver
|
|
61
|
-
|
|
62
|
-
The database driver requires a [database](https://github.com/MaskingTechnology/theshelf/tree/main/packages/database) from @theshelf and a table name (record type) to log messages into.
|
|
63
|
-
|
|
64
|
-
```ts
|
|
65
|
-
import { database } from './your-database-instance';
|
|
66
|
-
|
|
67
|
-
const recordType = 'logs';
|
|
68
|
-
const driver = new DatabaseDriver(database, recordType);
|
|
69
|
-
|
|
70
|
-
const logger = new Logger(driver);
|
|
71
|
-
```
|
|
72
|
-
|
|
73
|
-
### Operations
|
|
35
|
+
## Operations
|
|
74
36
|
|
|
75
37
|
```ts
|
|
76
38
|
// Log debug
|
|
77
|
-
await logger.
|
|
39
|
+
await logger.debug(message);
|
|
78
40
|
|
|
79
41
|
// Log info
|
|
80
|
-
await logger.
|
|
42
|
+
await logger.info(message);
|
|
81
43
|
|
|
82
44
|
// Log warning
|
|
83
|
-
await logger.
|
|
45
|
+
await logger.warn(message);
|
|
84
46
|
|
|
85
47
|
// Log error
|
|
86
|
-
await logger.
|
|
48
|
+
await logger.error(message);
|
|
87
49
|
|
|
88
50
|
// Log fatal
|
|
89
|
-
await logger.
|
|
51
|
+
await logger.fatal(message);
|
|
90
52
|
|
|
91
53
|
// Log multiple messages (works for all levels)
|
|
92
|
-
await logger.
|
|
54
|
+
await logger.info(message1, message2, ...);
|
|
93
55
|
|
|
94
56
|
// Logging multiple types of values (works for all levels)
|
|
95
|
-
await logger.
|
|
57
|
+
await logger.info('string', new Error('Oops...'), 42, [ 'a', 3.14 ], { name: 'John Doe', age: null });
|
|
96
58
|
```
|
|
97
59
|
|
|
98
|
-
|
|
60
|
+
## Value interpretation
|
|
99
61
|
|
|
100
62
|
Currently, the logger has support for the following types of values:
|
|
101
63
|
|
|
@@ -103,6 +65,27 @@ Currently, the logger has support for the following types of values:
|
|
|
103
65
|
* Null / undefined
|
|
104
66
|
* Errors (its stack if available or else its message)
|
|
105
67
|
* Arrays (all values will be interpreted and concatenated with a space between them)
|
|
106
|
-
* Objects (will be
|
|
68
|
+
* Objects (will be stringified)
|
|
107
69
|
|
|
108
70
|
In case multiple messages are given, they will be concatenated with a space between them.
|
|
71
|
+
|
|
72
|
+
## Drivers
|
|
73
|
+
|
|
74
|
+
There are three drivers included in this package. Other drivers are available in separate packages.
|
|
75
|
+
|
|
76
|
+
### Void
|
|
77
|
+
|
|
78
|
+
Dummy driver that doesn't log anything (suited for testing). It doesn't have any configuration options or additional operations.
|
|
79
|
+
|
|
80
|
+
### Memory
|
|
81
|
+
|
|
82
|
+
In memory logging (suited for testing). It doesn't have any configuration options, but has an additional operation.
|
|
83
|
+
|
|
84
|
+
```ts
|
|
85
|
+
// Clear the memory
|
|
86
|
+
driver.clear();
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
### Console
|
|
90
|
+
|
|
91
|
+
Driver based on the Node.js console. It doesn't have any configuration options or additional operations.
|
package/dist/Logger.d.ts
CHANGED
|
@@ -1,13 +1,16 @@
|
|
|
1
1
|
import type { LogLevel } from './definitions/constants.js';
|
|
2
2
|
import type { Driver } from './definitions/interfaces.js';
|
|
3
|
-
|
|
3
|
+
import type { Log } from './definitions/types.js';
|
|
4
|
+
export default class Logger {
|
|
4
5
|
#private;
|
|
5
|
-
constructor(driver: Driver);
|
|
6
|
+
constructor(driver: Driver, source?: string);
|
|
6
7
|
set logLevel(level: LogLevel);
|
|
7
8
|
get logLevel(): LogLevel;
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
9
|
+
for(source: string): Logger;
|
|
10
|
+
log(log: Log): Promise<void>;
|
|
11
|
+
debug(...message: unknown[]): Promise<void>;
|
|
12
|
+
info(...message: unknown[]): Promise<void>;
|
|
13
|
+
warn(...message: unknown[]): Promise<void>;
|
|
14
|
+
error(...message: unknown[]): Promise<void>;
|
|
15
|
+
fatal(...message: unknown[]): Promise<void>;
|
|
13
16
|
}
|
package/dist/Logger.js
CHANGED
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
import { LogLevels } from './definitions/constants.js';
|
|
2
2
|
export default class Logger {
|
|
3
3
|
#driver;
|
|
4
|
+
#source;
|
|
4
5
|
#logLevel = LogLevels.DEBUG;
|
|
5
|
-
constructor(driver) {
|
|
6
|
+
constructor(driver, source = 'Unknown') {
|
|
6
7
|
this.#driver = driver;
|
|
8
|
+
this.#source = source;
|
|
7
9
|
}
|
|
8
10
|
set logLevel(level) {
|
|
9
11
|
this.#logLevel = level;
|
|
@@ -11,40 +13,55 @@ export default class Logger {
|
|
|
11
13
|
get logLevel() {
|
|
12
14
|
return this.#logLevel;
|
|
13
15
|
}
|
|
14
|
-
|
|
16
|
+
for(source) {
|
|
17
|
+
const tracedSource = `${this.#source}.${source}`;
|
|
18
|
+
const logger = new Logger(this.#driver, tracedSource);
|
|
19
|
+
logger.logLevel = this.#logLevel;
|
|
20
|
+
return logger;
|
|
21
|
+
}
|
|
22
|
+
log(log) {
|
|
23
|
+
return this.#driver.log(log);
|
|
24
|
+
}
|
|
25
|
+
debug(...message) {
|
|
15
26
|
if (this.#logLevel > LogLevels.DEBUG) {
|
|
16
27
|
return Promise.resolve();
|
|
17
28
|
}
|
|
18
|
-
const
|
|
19
|
-
return this
|
|
29
|
+
const log = this.#createLog(LogLevels.DEBUG, message);
|
|
30
|
+
return this.log(log);
|
|
20
31
|
}
|
|
21
|
-
|
|
32
|
+
info(...message) {
|
|
22
33
|
if (this.#logLevel > LogLevels.INFO) {
|
|
23
34
|
return Promise.resolve();
|
|
24
35
|
}
|
|
25
|
-
const
|
|
26
|
-
return this
|
|
36
|
+
const log = this.#createLog(LogLevels.INFO, message);
|
|
37
|
+
return this.log(log);
|
|
27
38
|
}
|
|
28
|
-
|
|
39
|
+
warn(...message) {
|
|
29
40
|
if (this.#logLevel > LogLevels.WARN) {
|
|
30
41
|
return Promise.resolve();
|
|
31
42
|
}
|
|
32
|
-
const
|
|
33
|
-
return this
|
|
43
|
+
const log = this.#createLog(LogLevels.WARN, message);
|
|
44
|
+
return this.log(log);
|
|
34
45
|
}
|
|
35
|
-
|
|
46
|
+
error(...message) {
|
|
36
47
|
if (this.#logLevel > LogLevels.ERROR) {
|
|
37
48
|
return Promise.resolve();
|
|
38
49
|
}
|
|
39
|
-
const
|
|
40
|
-
return this
|
|
50
|
+
const log = this.#createLog(LogLevels.ERROR, message);
|
|
51
|
+
return this.log(log);
|
|
52
|
+
}
|
|
53
|
+
fatal(...message) {
|
|
54
|
+
const log = this.#createLog(LogLevels.FATAL, message);
|
|
55
|
+
return this.log(log);
|
|
41
56
|
}
|
|
42
|
-
|
|
43
|
-
const
|
|
44
|
-
|
|
57
|
+
#createLog(level, messages) {
|
|
58
|
+
const timestamp = new Date().toISOString();
|
|
59
|
+
const source = this.#source;
|
|
60
|
+
const message = this.#createMessage(messages);
|
|
61
|
+
return { timestamp, level, source, message };
|
|
45
62
|
}
|
|
46
|
-
#createMessage(
|
|
47
|
-
return
|
|
63
|
+
#createMessage(messages) {
|
|
64
|
+
return messages.map(message => this.#interpretValue(message)).join(' ');
|
|
48
65
|
}
|
|
49
66
|
#interpretValue(value) {
|
|
50
67
|
switch (typeof value) {
|
|
@@ -1,7 +1,4 @@
|
|
|
1
|
+
import type { Log } from './types.js';
|
|
1
2
|
export interface Driver {
|
|
2
|
-
|
|
3
|
-
logInfo(message: string): Promise<void>;
|
|
4
|
-
logWarn(message: string): Promise<void>;
|
|
5
|
-
logError(message: string): Promise<void>;
|
|
6
|
-
logFatal(message: string): Promise<void>;
|
|
3
|
+
log(log: Log): Promise<void>;
|
|
7
4
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -1,8 +1,6 @@
|
|
|
1
1
|
import type { Driver } from '../definitions/interfaces.js';
|
|
2
|
+
import type { Log } from '../definitions/types.js';
|
|
2
3
|
export default class Console implements Driver {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
logWarn(message: string): Promise<void>;
|
|
6
|
-
logError(message: string): Promise<void>;
|
|
7
|
-
logFatal(message: string): Promise<void>;
|
|
4
|
+
#private;
|
|
5
|
+
log(log: Log): Promise<void>;
|
|
8
6
|
}
|
package/dist/drivers/Console.js
CHANGED
|
@@ -1,18 +1,21 @@
|
|
|
1
1
|
/* eslint no-console: "off" */
|
|
2
|
+
import { LogLevels } from '../definitions/constants.js';
|
|
3
|
+
import levelToString from '../utils/levelToString.js';
|
|
2
4
|
export default class Console {
|
|
3
|
-
async
|
|
4
|
-
|
|
5
|
+
async log(log) {
|
|
6
|
+
const message = this.#createLogMessage(log);
|
|
7
|
+
switch (log.level) {
|
|
8
|
+
case LogLevels.DEBUG: return console.debug(message);
|
|
9
|
+
case LogLevels.INFO: return console.info(message);
|
|
10
|
+
case LogLevels.WARN: return console.warn(message);
|
|
11
|
+
default: return console.error(message);
|
|
12
|
+
}
|
|
5
13
|
}
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
async logError(message) {
|
|
13
|
-
return console.error(`[ERROR] ${message}`);
|
|
14
|
-
}
|
|
15
|
-
async logFatal(message) {
|
|
16
|
-
return console.error(`[FATAL] ${message}`);
|
|
14
|
+
#createLogMessage(log) {
|
|
15
|
+
const time = log.timestamp;
|
|
16
|
+
const level = levelToString(log.level);
|
|
17
|
+
const source = log.source;
|
|
18
|
+
const message = log.message;
|
|
19
|
+
return `[${time}][${level}][${source}] ${message}`;
|
|
17
20
|
}
|
|
18
21
|
}
|
package/dist/drivers/Memory.d.ts
CHANGED
|
@@ -1,17 +1,8 @@
|
|
|
1
|
-
import type { LogLevel } from '../definitions/constants.js';
|
|
2
1
|
import type { Driver } from '../definitions/interfaces.js';
|
|
3
|
-
type Log
|
|
4
|
-
level: LogLevel;
|
|
5
|
-
message: string;
|
|
6
|
-
};
|
|
2
|
+
import type { Log } from '../definitions/types.js';
|
|
7
3
|
export default class Memory implements Driver {
|
|
8
4
|
#private;
|
|
9
5
|
get logs(): Log[];
|
|
10
|
-
|
|
11
|
-
logInfo(message: string): Promise<void>;
|
|
12
|
-
logWarn(message: string): Promise<void>;
|
|
13
|
-
logError(message: string): Promise<void>;
|
|
14
|
-
logFatal(message: string): Promise<void>;
|
|
6
|
+
log(log: Log): Promise<void>;
|
|
15
7
|
clear(): void;
|
|
16
8
|
}
|
|
17
|
-
export {};
|
package/dist/drivers/Memory.js
CHANGED
|
@@ -1,21 +1,8 @@
|
|
|
1
|
-
import { LogLevels } from '../definitions/constants.js';
|
|
2
1
|
export default class Memory {
|
|
3
2
|
#logs = [];
|
|
4
3
|
get logs() { return this.#logs; }
|
|
5
|
-
async
|
|
6
|
-
this.#logs.push(
|
|
7
|
-
}
|
|
8
|
-
async logInfo(message) {
|
|
9
|
-
this.#logs.push({ level: LogLevels.INFO, message });
|
|
10
|
-
}
|
|
11
|
-
async logWarn(message) {
|
|
12
|
-
this.#logs.push({ level: LogLevels.WARN, message });
|
|
13
|
-
}
|
|
14
|
-
async logError(message) {
|
|
15
|
-
this.#logs.push({ level: LogLevels.ERROR, message });
|
|
16
|
-
}
|
|
17
|
-
async logFatal(message) {
|
|
18
|
-
this.#logs.push({ level: LogLevels.FATAL, message });
|
|
4
|
+
async log(log) {
|
|
5
|
+
this.#logs.push(log);
|
|
19
6
|
}
|
|
20
7
|
clear() {
|
|
21
8
|
this.#logs.splice(0);
|
package/dist/drivers/Void.d.ts
CHANGED
|
@@ -1,8 +1,5 @@
|
|
|
1
1
|
import type { Driver } from '../definitions/interfaces.js';
|
|
2
|
+
import type { Log } from '../definitions/types.js';
|
|
2
3
|
export default class Void implements Driver {
|
|
3
|
-
|
|
4
|
-
logInfo(message: string): Promise<void>;
|
|
5
|
-
logWarn(message: string): Promise<void>;
|
|
6
|
-
logError(message: string): Promise<void>;
|
|
7
|
-
logFatal(message: string): Promise<void>;
|
|
4
|
+
log(log: Log): Promise<void>;
|
|
8
5
|
}
|
package/dist/drivers/Void.js
CHANGED
|
@@ -1,18 +1,6 @@
|
|
|
1
1
|
/* eslint @typescript-eslint/no-unused-vars: "off" */
|
|
2
2
|
export default class Void {
|
|
3
|
-
|
|
4
|
-
return
|
|
5
|
-
}
|
|
6
|
-
logInfo(message) {
|
|
7
|
-
return Promise.resolve();
|
|
8
|
-
}
|
|
9
|
-
logWarn(message) {
|
|
10
|
-
return Promise.resolve();
|
|
11
|
-
}
|
|
12
|
-
logError(message) {
|
|
13
|
-
return Promise.resolve();
|
|
14
|
-
}
|
|
15
|
-
logFatal(message) {
|
|
16
|
-
return Promise.resolve();
|
|
3
|
+
async log(log) {
|
|
4
|
+
return;
|
|
17
5
|
}
|
|
18
6
|
}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
export
|
|
2
|
-
export type
|
|
3
|
-
export type
|
|
1
|
+
export { LogLevels } from './definitions/constants.js';
|
|
2
|
+
export type { LogLevel } from './definitions/constants.js';
|
|
3
|
+
export type { Driver } from './definitions/interfaces.js';
|
|
4
|
+
export type { Log } from './definitions/types.js';
|
|
4
5
|
export { default as LogError } from './errors/LogError.js';
|
|
5
6
|
export { default as ConsoleDriver } from './drivers/Console.js';
|
|
6
|
-
export { default as DatabaseDriver } from './drivers/Database.js';
|
|
7
7
|
export { default as MemoryDriver } from './drivers/Memory.js';
|
|
8
8
|
export { default as VoidDriver } from './drivers/Void.js';
|
|
9
9
|
export { default } from './Logger.js';
|
package/dist/index.js
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
|
-
export
|
|
1
|
+
export { LogLevels } from './definitions/constants.js';
|
|
2
2
|
export { default as LogError } from './errors/LogError.js';
|
|
3
3
|
export { default as ConsoleDriver } from './drivers/Console.js';
|
|
4
|
-
export { default as DatabaseDriver } from './drivers/Database.js';
|
|
5
4
|
export { default as MemoryDriver } from './drivers/Memory.js';
|
|
6
5
|
export { default as VoidDriver } from './drivers/Void.js';
|
|
7
6
|
export { default } from './Logger.js';
|
package/package.json
CHANGED
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@theshelf/logging",
|
|
3
3
|
"private": false,
|
|
4
|
-
"version": "0.
|
|
4
|
+
"version": "0.4.0",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"repository": {
|
|
7
7
|
"url": "git+https://github.com/MaskingTechnology/theshelf.git"
|
|
8
8
|
},
|
|
9
|
+
"license": "MIT",
|
|
9
10
|
"scripts": {
|
|
10
11
|
"build": "tsc",
|
|
11
12
|
"clean": "rimraf dist",
|
|
@@ -19,14 +20,6 @@
|
|
|
19
20
|
"README.md",
|
|
20
21
|
"dist"
|
|
21
22
|
],
|
|
22
|
-
"types": "dist/index.d.ts",
|
|
23
|
-
"exports": "./dist/index.js"
|
|
24
|
-
"peerDependencies": {
|
|
25
|
-
"@theshelf/database": "^0.3.0"
|
|
26
|
-
},
|
|
27
|
-
"peerDependenciesMeta": {
|
|
28
|
-
"@theshelf/database": {
|
|
29
|
-
"optional": true
|
|
30
|
-
}
|
|
31
|
-
}
|
|
23
|
+
"types": "./dist/index.d.ts",
|
|
24
|
+
"exports": "./dist/index.js"
|
|
32
25
|
}
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import type Database from '@theshelf/database';
|
|
2
|
-
import type { RecordType } from '@theshelf/database';
|
|
3
|
-
import type { Driver } from '../definitions/interfaces.js';
|
|
4
|
-
export default class DatabaseDriver implements Driver {
|
|
5
|
-
#private;
|
|
6
|
-
constructor(database: Database, recordType: RecordType);
|
|
7
|
-
logDebug(message: string): Promise<void>;
|
|
8
|
-
logInfo(message: string): Promise<void>;
|
|
9
|
-
logWarn(message: string): Promise<void>;
|
|
10
|
-
logError(message: string): Promise<void>;
|
|
11
|
-
logFatal(message: string): Promise<void>;
|
|
12
|
-
}
|
package/dist/drivers/Database.js
DELETED
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
export default class DatabaseDriver {
|
|
2
|
-
#database;
|
|
3
|
-
#recordType;
|
|
4
|
-
constructor(database, recordType) {
|
|
5
|
-
this.#recordType = recordType;
|
|
6
|
-
this.#database = database;
|
|
7
|
-
}
|
|
8
|
-
logDebug(message) {
|
|
9
|
-
return this.#logRecord('DEBUG', message);
|
|
10
|
-
}
|
|
11
|
-
logInfo(message) {
|
|
12
|
-
return this.#logRecord('INFO', message);
|
|
13
|
-
}
|
|
14
|
-
logWarn(message) {
|
|
15
|
-
return this.#logRecord('WARN', message);
|
|
16
|
-
}
|
|
17
|
-
logError(message) {
|
|
18
|
-
return this.#logRecord('ERROR', message);
|
|
19
|
-
}
|
|
20
|
-
logFatal(message) {
|
|
21
|
-
return this.#logRecord('FATAL', message);
|
|
22
|
-
}
|
|
23
|
-
async #logRecord(level, message) {
|
|
24
|
-
const data = {
|
|
25
|
-
timestamp: new Date().toISOString(),
|
|
26
|
-
level,
|
|
27
|
-
message
|
|
28
|
-
};
|
|
29
|
-
await this.#database.createRecord(this.#recordType, data);
|
|
30
|
-
}
|
|
31
|
-
}
|